2011-07-26 6 views
1


안녕하세요 모두
콘솔 응용 프로그램에서 .Net 2와 함께 작업하고 있습니다.
나는 오랜 시간 일하는 방법이 있습니다. 그 이름은 :
public void DO(){....}
내가 작업을 중지하려면 키를 누릅니다.
나는 그것을 어떻게 우아하게합니까? 이벤트가 포함 된
? 당신의 도움이 단순히 다른 스레드에서 DO(..)을 실행하고 메인 쓰레드 Console.ReadLine() 또는 기타 과부하의 키를 눌러 수신 할 수있는 솔루션의콘솔 응용 프로그램에서 백그라운드에서 듣고있는 # keypress

+0

DO()는 무엇을합니까? 데이터베이스와 트랜잭션을 수행하고 있습니까? 내부에'while' 루프가 있습니까? –

답변

2

하나에 대한
감사합니다. 열쇠를 얻는 순간, DO(...) 메소드의 스레드로 신호를 보내 중지하십시오.

편집

간단하고 아주 기본적인 예를 여기에서 찾을 수 있습니다 volatile bool 변수를 사용하여 (난 당신에 대한 C# 2.0을 얘기 참조) 만 사용

Sample

+0

답변 해 주셔서 감사합니다. 제대로 작동해야한다고 생각하지만 간단한 해결책을 찾고 싶습니다. 나는 대의원과 이벤트로 쉽게 그 일을 할 수 있다고 생각합니다. – Tal

+0

장기간 실행되는 프로세스를 실행하고 사용자가 필요로하는 순간에 취소 할 수 있도록하려면 멀티 스레딩이 아닌 다른 옵션이 필요하지 않습니다. 이벤트가 있으면 많은 도움이되지 않을 것입니다. 응용 프로그램의 주 스레드가 무거운 계산에서는별로 없습니다. – Tigran

+0

타이머 이벤트와 함께 사용합니다. 그것은 잘 작동합니다. 하지만 설명해 주셔서 감사합니다. – Tal

0

처럼 티그 말했다 실. 이벤트를 사용하면 다음 이벤트가 수신 될 때까지 응용 프로그램이 정지됩니다.

private static bool abortthread = false; 

public static void main() 
{ 
    new Thread(new ThreadStart(DO)).Start(); 
    Console.ReadLine(); 
    abortthread = true; 
} 

private static DO() 
{ 
    while(true) 
    { 
     if(abortthread) 
     return; 
    } 
}
관련 문제