[C#] Thread in formulier, methode daarna verder laten lopen

Pagina: 1
Acties:

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
Hoi,

Ik ben een C# applicatie aan het maken en in mijn formulier wil ik een Thread laten lopen. Pas nadat deze Thread afgehandeld is mag mijn code verderlopen.

Wanneer ik Thread.Start en daarna Thread.Join() gebruik bevriest mijn formulier. Iemand een idee hoe ik dit netjes kan oplossen?

http://www.tweakers.net/gallery/sys/2314


  • Brainstorm
  • Registratie: November 2000
  • Laatst online: 09:08
Je formulier bevriest omdat Join() blijft wachten op je 2e thread, dus alle GUI messages worden intussen niet afgehandeld. Wat je zou kunnen doen is een mechanisme maken waardoor de 2e thread aan de eerste doorgeeft dat hij klaar is. Voorbeeld

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class A : System.Windows.Forms.Form
{
   ...
   public void HandleButtonPress(object sender, EventArgs args)
   {
      // start thread 2
      B b = new B(new EventHandler(NotifyFirstThread));
      Thread t = new Thread(new ThreadStart(b.ThreadEntry));
      t.Start();
   }

   public void NotifyFirstThread(object sender, EventArgs args)
   {
      this.invoke(new EventHandler(ContinueWork));
   }

   public void ContinueWork(object sender, EventArgs args)
   {
       // dit wordt aangeroepen nadat de eerste thread beeindigd is
   }
}

public class B
{
   public B(EventHandler threadFinishedHandler)
   {
      m_threadFinishedHandler = threadFinishedHandler;
   }

   public void ThreadEntry()
   {
       // doe je werk van de 2e thread hier en sluit af met:
       m_threadFinishedHandler(null, null);
       // zodat de eerste thread gewaarschuwd xal worden
   }

   EventHandler m_threadFinishedHandler;
}


Dit is even uit mijn hoofd, er kunnen wat kleine foutjes inzitten. Wat er gebeurd is dat je eerste thread gewoon doorgaat nadat de 2e is opgestart, zodat de GUI blijft reageren. De invoke() zorgt er uiteindelijk voo dat de eerste thread weer door gaat.

Programmer's Drinking Song: 99 little bugs in the code, 99 bugs in the code, Fix one bug, compile it again, 100 little bugs in the code. (go to start if bugs>0)


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:54
Robbeke schreef op woensdag 19 januari 2005 @ 22:07:
Hoi,

Ik ben een C# applicatie aan het maken en in mijn formulier wil ik een Thread laten lopen. Pas nadat deze Thread afgehandeld is mag mijn code verderlopen.
Waarom gebruik je dan een thread ? :?

https://fgheysels.github.io/


  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
NoLife: heel erg bedankt dit werkt heel erg netjes _/-\o_

whoami: omdat als ik het zonder thread doe het formulier zeker bevriest :)

http://www.tweakers.net/gallery/sys/2314


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 16-05 11:22
Robbeke schreef op woensdag 19 januari 2005 @ 22:07:
Hoi,

Ik ben een C# applicatie aan het maken en in mijn formulier wil ik een Thread laten lopen. Pas nadat deze Thread afgehandeld is mag mijn code verderlopen.

Wanneer ik Thread.Start en daarna Thread.Join() gebruik bevriest mijn formulier. Iemand een idee hoe ik dit netjes kan oplossen?
Wat whoami denk ik ook bedoeld: welke code moet wachten op je thread? Want waarom zou je anders een thread gebruiken? Waarom staat de code die moet "wachten" dan ook niet gewoon in de thread?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack