2

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

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

while 循环需要等待 2 秒,但总是抛出如下异常:

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

在声明中Thread.Sleep(2000)。所以任何人都可以帮助我一些解决方案。非常感谢,

4

2 回答 2

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
   }
}
于 2011-12-30T04:45:55.260 回答
1

似乎您需要一些 Fire and 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

在 C# 中执行火灾和忘记方法的最简单方法?

问候。

于 2011-12-30T05:49:45.430 回答