У меня есть небольшая форма, которая создает два потока рабочего потока, которые прослушивают сообщения из двух отдельных процессов сервера. Когда пользователь пытается закрыть форму, я обрабатываю событие OnFormClosing (или они могут щелкнуть элемент «Выход»), который вызывает CancelAsync() для обоих потоков. Затем форма ждет, пока свойство IsBusy для обоих потоков не будет «FALSE» перед вызовом среды. Exit (0).Environment.Exit() заставляет мое приложение сбой после использования Process.Start
Вот улов: из этой формы пользователь может запустить отдельное приложение. Это делается с помощью Process.Start, когда нажимается конкретная кнопка. Если пользователь создал новый процесс через форму, а затем закрывает форму, а не изящно выходит из строя, я получаю одно из этих сообщений об ошибках Windows. Application.Exit не работает, потому что он не закрывает форму по какой-то причине без ведома. Я уверен, что оба потока завершены, потому что я обрабатываю событие RunWorkerCompleted для обоих потоков. Здесь находится оболочка кода ядра:
private void startProcess_buttonClick(sender, e)
{
Process.Start(<process args>);
}
protected override OnFormClosing()
{
e.Cancel = true;
if (!thread1.IsBusy && !thread2.IsBusy)
Environment.Exit(0);
stopThreads();
}
private void stopThreads()
{
if (thread1.IsBusy)
thread1.CancelAsync();
if (thread2.IsBusy)
thread2.CancelAsync();
}
private void thread1_RunWorkerCompleted(sender, e)
{
if (!thread2.IsBusy)
Environment.Exit(0);
}
private void thread2_RunWorkerCompleted(sender, e)
{
if (!thread1.IsBusy)
Environment.Exit(0);
}
Любые идеи относительно того, что может вызвать сбой в среде. Exit?
Вы смотрели на журнал событий? Он регистрирует точную ошибку. – Aliostad
Вот что он читает: «EventType clr20r3; P1 ccs_wsdt.exe, P2 1.0.0.0. P3 4cb0eeb3. P4 system.windows.forms. P5 2.0.0.0. P6 471ebf68. P7 16c6. P8 159. P9 system.componentmodel. win32. P10 NIL " Не знаю, как это интерпретировать. Код/приложение запускается в автономной сети, поэтому мне нужно вручную вводить все здесь. – alexD