2010-03-12 9 views
9

GUI로 winform을 사용하는 C#과 백그라운드에서 자동으로 변경되는 백그라운드에서 실행되는 별도의 스레드를 사용하여 응용 프로그램을 만들고 있습니다. 예 :스레드를 일시 중지/일시 중지 한 다음 계속하는 방법은 무엇입니까?

루프의 한 반복에는 약 30 초가 걸리기 때문에 루프의 어느 위치에서든 일시 중지하도록 만드는 방법은 무엇입니까? 그래서 완성 된 하나의 루프가 끝나면 멈추고 싶지는 않습니다. 제 시간에 멈추고 싶습니다.

답변

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

빠른 참고 : 작성한대로이 예제는 일시 중지 상태에서 시작됩니다 ('new ManualResetEvent (false);'줄에 설명 된대로). 고마워요 @ Lirik –

+0

나는 또한 같은 문제에 직면 .. 대단히 감사합니다 @ Lirik. 너의 영혼이 나를 위해 일 했어. –

1

thread.Suspend을 호출하여 스레드를 일시 중지 할 수 있지만 더 이상 사용되지 않습니다. 동기화를 수행하기 위해 autoresetevent을 살펴 보겠습니다.

1

이 작업은 ManualResetEvent을 통해 수행해야합니다.

을 :

다른 스레드에
ManualResetEvent mre = new ManualResetEvent(); 
mre.WaitOne(); // This will wait 

, 분명히 당신은 다시 다음 뭔가를 다른 스레드를 기다리고, 일부 텍스트를 인쇄 할 MRE

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

전체 예에 대한 참조가 필요합니다

관련 문제