我们运行一个 C# 控制台应用程序,该应用程序启动多个线程来完成工作。主要功能看起来像这样:
try
{
DoWork();
}
catch (Exception err)
{
Logging.Log("Exception " + err.ToString());
}
Logging.Log("Finished");
DoWork()
函数从数据库中读取新作业,并生成线程来处理每个工作项。从上周开始,该应用程序开始神秘消失。它从进程列表中消失并且事件日志中没有条目。日志文件显示特定点之前的工作:它不记录异常或“完成”行。
关于 C# 应用程序如何像那样消失的任何线索?
编辑:线程的创建方式如下:
new Thread(SomeObj.StartFunc).Start();
一些消失发生在没有线程运行时。
附言我们在安装 DebugDiag 时设置了一条规则,以便在我们的程序崩溃时创建故障转储。当进程消失时,它没有创建任何转储文件。
最佳答案
您需要在每个线程工作的函数的顶层有一个类似的 catch block 。如果线程上存在未捕获的异常,它将终止应用程序,而主线程上的 catch block 将无济于事。
关于C# 应用程序意外终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1278126/