Gå til innhold

C#: asynchronous delegate, problem: threaden "låses"


Anbefalte innlegg

Heisann!

 

tenkte jeg skulle leke meg litt med GDI+, og lagde ett søtt lite testprogram. Problemet er bare at tråden låses, slik at prosessen manuelt må avsluttes for å avslutte programmet. Jeg tenkte at det ikke skulle bli noe problem, bare bruke BeginInvoke() det.. Fullt så enkelt var det altså ikke:

KODE: http://pastebin.no/359

Hvis jeg ikke har EndInvoke() der stenger programmet av seg selv med en gang. Hvis jeg bruker Thread.Sleep() i hovedthreaden oppnår jeg bare det samme som nå. Det jeg ønsker er at den skal fortsette å tegne helt til brukeren trykker på krysset for å avslutte.

 

Noen som vet hvordan jeg kan løse dette dilemmaet?

Endret av JeyKey
Lenke til kommentar
Videoannonse
Annonse

Application.DoEvents

 

Legg til en

public volatile bool AppIsRunning = true

public void ThreadLoop()
{
 while(AppIsRunning)
 {
   // Draw!
   Application.DoEvents();

 }
 Form_Closing(...)
 {
   AppIsRunning = false;
   while(m_thread.ThreadState == System.Threading.ThreadState.Running)
   {
     Application.DoEvents();
   }
 }
}

 

Vet ikke om volatile er nødvendig, men i C++ må du deklarere det for at variabler ikke skal bli lagt i CPU-en sin cache, noe som gjorde at variablen ikke ble oppdatert for hver thread.

 

Har ikke testet dette.

Endret av GeirGrusom
Lenke til kommentar

du er dagens redning, Geir!

jeg hadde aldri hørt om keywordet volatile før, men det er vel ikke nødvendig når alt kjører på samme thread, slik som nå? Jeg fjerna alt som hadde med threading og delegates å gjøre. Den siste delen med while(Thread.CurrentThread.ThreadState == ThreadState.Running) funka ikke helt da, men erstatta den delen med Application.ExitThread() jeg :whistle:

Endret av JeyKey
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...