在Environment.Exit()上捕获异常

时间:2009-05-25 08:24:22

标签: c# exit exit-code

我的主要功能结束后,我需要返回1的退出代码。但是我有一个永远不会结束的其他线程(while(true))。所以我设法调用 Environment.Exit(1)。但是在处理com对象时我遇到了一些例外......

由于多种原因,我无法更改其他线程代码。你们主张做什么?

我可以捕获来自com对象处理的异常吗?我还有其他选项可以退回退出代码吗?

3 个答案:

答案 0 :(得分:1)

我建议你:附加到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);

答案 1 :(得分:0)

尝试使用:

Environment.ExitCode = 1;

然而;如果另一个线程不是后台线程,你将需要它退出以结束进程(退出代码在进程退出之前毫无意义)。

答案 2 :(得分:0)

您可以通过编写此代码来终止进程 Dim myProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess()myProcess.Kill()

或 Environment.exit(1) 是杀死所有进程的最佳方法

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