2011-12-30 89 views
2

我有網頁背後一個ASPX代碼,使用流程(P)來調用的應用程序(EXE文件)作爲下面的代碼:不能等待過程中運行,直到結束

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

while循環採取等待但總是拋出如下例外:

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

在聲明Thread.Sleep(2000)。 所以任何人都可以幫助我解決一些問題。 非常感謝,

+0

子進程運行多長時間? – 2011-12-30 04:24:31

+0

您是否強制父進程在您的'Thread.Sleep'中結束?爲什麼不使用內置的'WaitForExit'方法? – 2011-12-30 05:19:28

回答

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#?

問候。