2014-04-14 1 views
0

어떤 사이클을 수행하고 WinForms의 다른 버튼을 누를 때까지 끊는 방법이 있습니까?다른 버튼을 누를 때까지 아무 사이클이나 C#

t.Start(); 

:

Thread t = new Thread (delegate() { 
    while(true) { 
    What you want to happen inside the loop in here; 
    Thread.Sleep(500); // this is useful for keeping the headroom of the CPU 
    } 
}); 

하는 스레드 이런 식으로 시작 GUI를 차단하지 않고이 작업을 수행 할 수 있습니다

do 
     { 
      //Action 
     } while ("Button Stop is pressed"); 
+0

이 작업을 수행하는 올바른 방법은 다음과 같습니다. [Async in 4.5 : Async API에서 진행 및 취소 활성화] (http://blogs.msdn.com/b/dotnet/archive/2012/06/06/async- in-4-5- 사용 가능 - 진행 및 취소 - async-apis.aspx). – Noseratio

답변

1

가장 좋은 방법은 예를 들어, 스레드를 사용하는 것이다 정지 버튼을 누르면 스레드가 중단됩니다.

t.Abort(); 

이것은 GUI를 계속 유지합니다.

1 - 당신은 메인 스레드 이벤트가 발생하지 않습니다 차단하고 버튼 클릭을 잡을 수없는 경우 다음 대답은 '아니오', 메인 쓰레드에서 그 루프를 실행 :

+0

고맙습니다. 작동합니다! – user3363472

+0

@ user3363472 : 매우 환영합니다. – Transcendent

+0

-1에 대해 'Thread.Abort'에 대해이 답변 (또는 기타 답변)을 수락 할 수 있습니다. 스레드 종료의 끔찍한 방법입니다. http://stackoverflow.com/questions/421389/is-this-thread-abort-normal-and-safe – Noseratio

0

는 두 가지 경우가 있습니다.

2 - 작업자 스레드에서 해당 루프를 실행하고 있습니다.이 경우 함수에서 부울을 true로 설정하고 루프에서이 부울을 확인한 다음 단추의 클릭 이벤트에서 false로 설정할 수 있습니다.

관련 문제