2011-12-30 6 views
2

나는 코드를 다음과 같이 프로세스 (p)를 사용하여 페이지 뒤에 하나 개 영문 코드, 응용 프로그램 (exe 파일)를 호출 할 수 있습니다가 끝날 때까지 실행중인 프로세스를 기다릴 수

p.Start(); 
while(!p.HasExited) 
{ 
    Thread.Sleep(2000); 
} 
p.Dispose(); 

루프 대기 취할하면서 2 초에,하지만 항상 아래와 같이 예외를 던지고있다 :

System.Threading.ThreadAbortException: Thread was being aborted. 
    at System.Threading.Thread.SleepInternal(Int32 millisecondsTimeout) 
    at Insyma.ContentUpdate.XmlReader.DoSleep() 

을 문 Thread.Sleep(2000)에서. 누구든지 솔루션을 도울 수 있습니다. 일부 화재를 필요 패턴을 잊어 버려 같은 정말 고마워요,

+0

하위 프로세스는 얼마나 오래 실행됩니까? –

+0

부모 프로세스가'Thread.Sleep'에있는 동안 강제 종료 했습니까? 내장 WaitForExit 메소드를 사용하지 않는 이유는 무엇입니까? –

답변

3

사용 AutoResetEvent

class BasicWaitHandle 
{ 
    static EventWaitHandle _waitHandle = new AutoResetEvent (false); 
    static void Main() 
    { 
     new Thread (Waiter).Start();   
     _waitHandle.WaitOne(); //wait for notification 
     //Do operartion 
    } 

    static void Waiter() 
    { 
     //Do operations 
     _waitHandle.Set(); //Unblock 
    } 
} 
1

보인다. 스레드가 종료되면 페이지가 렌더링되고 인스턴스가 삭제되기 쉽기 때문에 종료됩니다. 그래서 이것이 필요한 것일 수 있습니다. 더 많은 정보를 들어

ThreadPool.QueueUserWorkItem(o => FireAway()); 

private void FireAway() 
{ 
p.Start(); 
while(!p.HasExited) 
{ 
    Thread.Sleep(2000); 
} 
p.Dispose(); 

} 

: http://weblogs.asp.net/albertpascual/archive/2009/05/14/fire-and-forget-class-for-asp-net.aspx

Simplest way to do a fire and forget method in C#?

감사합니다.

관련 문제