我的主要功能结束后,我需要返回退出代码 1。但是,我还有一个永远不会结束的线程(while(true))
。所以我设法打电话给Environment.Exit(1)。但是在处理 com 对象时我遇到了一些异常......
由于几个原因,我无法更改其他线程代码。大家提倡怎么做?
我可以捕获来自 com 对象处理的异常吗?我是否有其他选项可以返回退出代码?
我建议您:附加到 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);
您可以通过编写此代码来终止进程 Dim myProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess() myProcess.Kill()
或 Environment.exit(1) 是杀死所有进程的最佳方法
尝试使用:
Environment.ExitCode = 1;
然而; 如果另一个线程不是后台线程,则需要它退出才能结束进程(退出代码在进程退出之前是没有意义的)。