GUI로 winform을 사용하는 C#과 백그라운드에서 자동으로 변경되는 백그라운드에서 실행되는 별도의 스레드를 사용하여 응용 프로그램을 만들고 있습니다. 예 :스레드를 일시 중지/일시 중지 한 다음 계속하는 방법은 무엇입니까?
루프의 한 반복에는 약 30 초가 걸리기 때문에 루프의 어느 위치에서든 일시 중지하도록 만드는 방법은 무엇입니까? 그래서 완성 된 하나의 루프가 끝나면 멈추고 싶지는 않습니다. 제 시간에 멈추고 싶습니다.
GUI로 winform을 사용하는 C#과 백그라운드에서 자동으로 변경되는 백그라운드에서 실행되는 별도의 스레드를 사용하여 응용 프로그램을 만들고 있습니다. 예 :스레드를 일시 중지/일시 중지 한 다음 계속하는 방법은 무엇입니까?
루프의 한 반복에는 약 30 초가 걸리기 때문에 루프의 어느 위치에서든 일시 중지하도록 만드는 방법은 무엇입니까? 그래서 완성 된 하나의 루프가 끝나면 멈추고 싶지는 않습니다. 제 시간에 멈추고 싶습니다.
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();
}
thread.Suspend
을 호출하여 스레드를 일시 중지 할 수 있지만 더 이상 사용되지 않습니다. 동기화를 수행하기 위해 autoresetevent을 살펴 보겠습니다.
이 작업은 ManualResetEvent을 통해 수행해야합니다.
을 : 다른 스레드에ManualResetEvent mre = new ManualResetEvent();
mre.WaitOne(); // This will wait
, 분명히 당신은 다시 다음 뭔가를 다른 스레드를 기다리고, 일부 텍스트를 인쇄 할 MRE
mre.Set(); // Tells the other thread to go again
전체 예에 대한 참조가 필요합니다
빠른 참고 : 작성한대로이 예제는 일시 중지 상태에서 시작됩니다 ('new ManualResetEvent (false);'줄에 설명 된대로). 고마워요 @ Lirik –
나는 또한 같은 문제에 직면 .. 대단히 감사합니다 @ Lirik. 너의 영혼이 나를 위해 일 했어. –