我需要在我的主函数结束后返回退出码1。然而,我有另一个永远不会结束的线程(while(true))
。所以我设法调用了Environment.Exit(1)。但是当处理COM对象时出现了一些异常...
由于种种原因,我无法更改其他线程的代码。你们建议我怎么做?
我能捕获来自COM对象处理的异常吗?还有其他选项可以返回退出码吗?
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);
尝试使用:
Environment.ExitCode = 1;
然而,如果另一个线程不是后台线程,你需要让它退出才能结束进程(直到进程退出之前,退出代码都没有意义)。
你可以通过编写以下代码来终止进程: Dim myProcess As System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess() myProcess.Kill()
或 Environment.Exit(1) 是终止所有进程的最佳方法。
Thread.Abort
是一个可怕的想法,除了它被设计用于的一种情况 - 在应用程序域卸载期间,中止不遵守规则的线程。进程终止也意味着应用程序域卸载,因此这实际上是一个“不像其他用例那么可怕”的使用情况 :D - Luaan