不能等到进程运行直到结束

时间:2011-12-30 04:20:45

标签: c# .net multithreading threadabortexception

我在页面后面有一个aspx代码,它使用进程(p)来调用应用程序(exe文件),如下代码所示:

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

while循环等待2s,但总是抛出异常,如下所示:

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

声明Thread.Sleep(2000)。 所以任何人都可以帮我解决一些问题。 非常感谢,

2 个答案:

答案 0 :(得分: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 :(得分:1)

好像你需要一些Fire和Forget模式。线程正在退出,因为一旦页面被渲染,它的实例很容易被处理..所以这可能是你需要的。

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

问候。