我的主要功能结束后,我需要返回1的退出代码。但是我有一个永远不会结束的其他线程(while(true))
。所以我设法调用 Environment.Exit(1)。但是在处理com对象时我遇到了一些例外......
由于多种原因,我无法更改其他线程代码。你们主张做什么?
我可以捕获来自com对象处理的异常吗?我还有其他选项可以退回退出代码吗?
答案 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) 是杀死所有进程的最佳方法