Поймать исключение в Environment.Exit () - PullRequest
4 голосов
/ 25 мая 2009

Мне нужно вернуть код выхода 1 после завершения моих основных функций. Однако у меня есть другой поток, который никогда не заканчивается (while(true)). Поэтому мне удалось позвонить Environment.Exit (1) . Но я получил исключение при утилизации ком-объектов ...

По нескольким причинам я не могу изменить код другого потока. Что вы, ребята, защищаете?

Могу ли я поймать исключение, возникающее при утилизации com-объекта? У меня есть другой вариант для возврата кода выхода?

Ответы [ 3 ]

1 голос
/ 25 мая 2009

Я предлагаю вам: присоединиться к событию ProcessExit для выполнения последней очистки или ... выполнить Thread.Abort в потоке, чтобы завершить его до выхода.

AppDomain.CurrentDomain.ProcessExit +=
delegate(object sender, EventArgs e)
{
    Console.WriteLine("Process Exit");
};
Thread t1 = new Thread(new ThreadStart(delegate
{
try
{
    while (true)
    {
        Console.WriteLine("test 1");
        Thread.Sleep(500);
    }
}
finally
{
    Console.WriteLine("Terminating t1");
}
}));

Thread t2 = new Thread(new ThreadStart(delegate
{
try
{
    while (true)
    {
        Console.WriteLine("test 2");
        Thread.Sleep(500);
    }
}
finally
{
    Console.WriteLine("Terminating t2");
}
}));

t1.Start();
t2.Start();
Thread.Sleep(2000);
t2.Abort();
t2.Join();
Environment.Exit(1);
0 голосов
/ 30 июля 2009

вы можете убить процесс, написав этот код Dim myProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess () myProcess.Kill ()

или Environment.exit (1) лучший способ уничтожить все процессы

http://www.zhakkas.com/affiliates/idevaffiliate.php?id=542

0 голосов
/ 25 мая 2009

Попробуйте использовать:

Environment.ExitCode = 1;

Тем не менее, если другой поток не является фоновым потоком, вам потребуется , чтобы выйти из него, чтобы завершить процесс (код завершения не имеет смысла до завершения процесса).

...