4

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

由于几个原因,我无法更改其他线程代码。大家提倡怎么做?

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

4

3 回答 3

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);
于 2009-05-25T09:25:51.000 回答
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

于 2009-07-30T13:34:49.797 回答
0

尝试使用:

Environment.ExitCode = 1;

然而; 如果另一个线程不是后台线程,则需要它退出才能结束进程(退出代码在进程退出之前是没有意义的)。

于 2009-05-25T09:16:54.417 回答