2010-03-12 7 views
9

Ich mache eine Anwendung in C#, die ein WinForm als GUI und einen separaten Thread verwendet, der im Hintergrund automatisch die Dinge ändert. Bsp:Wie pausiere/suspendiere ich einen Thread und fahre fort?

Wie würde ich es irgendwo in der Schleife anhalten, weil eine Iteration der Schleife etwa 30 Sekunden dauert. Also ich möchte es nicht pausieren, nachdem es eine Schleife gemacht hat, ich möchte es pausieren.

Antwort

14
ManualResetEvent mrse = new ManualResetEvent(false); 

public void run() 
{ 
    while(true) 
    { 
     mrse.WaitOne(); 
     printMessageOnGui("Hey"); 
     Thread.Sleep(2000); . . 
    } 
} 

public void Resume() 
{ 
    mrse.Set(); 
} 

public void Pause() 
{ 
    mrse.Reset(); 
} 
+1

Kurzer Hinweis: Wie beschrieben, beginnt dieses Beispiel im angehaltenen Zustand (wie in der Zeile 'new ManualResetEvent (false); instruiert). Danke @Lirik –

+0

ich auch vor der gleichen Frage .. Vielen Dank @Lirik. Deine Entscheidung hat auch für mich funktioniert. –

1

Sie können einen Thread pausieren, indem Sie thread.Suspend aufrufen, aber das ist veraltet. Ich würde einen Blick auf autoresetevent für die Durchführung Ihrer Synchronisation werfen.

1

Sie sollten dies über eine ManualResetEvent tun.

ManualResetEvent mre = new ManualResetEvent(); 
mre.WaitOne(); // This will wait 

Auf einem anderen Thread, müssen Sie offensichtlich einen Verweis auf die MRE

mre.Set(); // Tells the other thread to go again 

Ein vollständiges Beispiel, das einen Text druckt, für einen anderen Thread warten, etwas zu tun, und dann wieder auf:

class Program 
{ 
    private static ManualResetEvent mre = new ManualResetEvent(false); 

    static void Main(string[] args) 
    { 
     Thread t = new Thread(new ThreadStart(SleepAndSet)); 
     t.Start(); 

     Console.WriteLine("Waiting"); 
     mre.WaitOne(); 
     Console.WriteLine("Resuming"); 
    } 

    public static void SleepAndSet() 
    { 
     Thread.Sleep(2000); 
     mre.Set(); 
    } 
} 
Verwandte Themen