2011-12-30 65 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#?

问候。