Не могу дождаться завершения процесса до конца - PullRequest
2 голосов
/ 30 декабря 2011

У меня есть один код 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). Так что любой может помочь мне с некоторыми решениями. Большое спасибо,

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Использовать 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 голос
/ 30 декабря 2011

Похоже, вам нужен образец огня и забыть.Поток завершается, потому что после того, как страница отрисована, ее экземпляр склонен к удалению ... так что это может быть то, что вам нужно.

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

С уважением.

...