Hej på er UI-grejer får bara anropas från UI-tråden/maintråden. Vad är skillnaden på en vanlig UI timer och den jag använder? Och vad gör invoke? Jag vet inte säkert om det löser problemet, men UI-timern jag menar är den i System.Windows.Forms.Timer.Problem med timer
Jag postade här om dan och frågade om en msn-liknande popupruta [Diskret popupruta, något i stil med msn]. Som jag skrev så hittade jag en: ( http://www.vbforums.com/showthread.php?t=547778 ) och den fungerar utmärkt för mina ändamål, men nu har jag stött på ett problem. Jag vill att den ska öppnas efter en viss tid så jag försöker göra något i stil med det här:
<code>
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Timer t = new System.Threading.Timer(showPopup, null, 1000, 1000);
}
</code>
<code>
private void showPopup(object o)
{
ToastForm slice = new ToastForm(5000, "Some text");
slice.Show();
}
</code>
Det som händer är att den poppar upp efter angiven tid men sedan fryser, samma sak händer ifall jag försöker skapa/öppna den i en annan tråd.Sv: Problem med timer
Troligen anropar din timer UI från annan tråd.
Använd Invoke eller en vanlig UI-timer.Sv:Problem med timer
Jag är väldigt ny med att skriva icke-web applikationer i c# så jag har inte ritkigt koll på allt ännu.
Jag testade att göra ett simplare projekt, där jag inte använder toast-koden utan helt enkelt öppnar ett form ungefär som ovan, men i en tråd istället för en timer, det som händer då är att den visas ungefär en halv sekund och sedan försvinner.
Med en timer blir det likadant som tidigare, den fryser.Sv: Problem med timer
Den kan man använda genom att dra den från Toolboxen med kontroller ut på din Form.
Invoke är en metod man anropar när man är i en annan tråd än UI-tråden. Man skickar med vilken metod som ska köras. Den läggs då på en kö. När sedan UI:t inte är upptaget längre körs metoden från UI-tråden.