日期:2014-05-17  浏览次数:20920 次

C#程序关于某个线程意外退出后引发的程序奔溃
一个项目程序,里面用到了很多线程,程序涉及到跟串口通信,连接投币器,打印机等,但是由于某些未知的原因(我调试了几个月也没找出原因所在,调试环境特殊,程序退出也是不定时,有时一天一次,一天几次,几天一次毫无规律),总是会发生异常退出的情况,现在的程序我能在有可能引发异常的情况都加了捕获异常处理,还额外写了个程序去检测主程序进程是否存在,不存在则启动,但你问题还是无法解决,当程序崩溃时,程序退出了,进程中仍有残留的线程导致无法再次自动启动,程序是运行在像pos机那样的机器上,提供查询,现在想解决这个退出或者启动问题,不知道怎么去做?如果程序退出了,仍有残留线程,该去怎么判断让主线程退出(程序界面很多,子线程不断地被创建和完成,一旦某个线程出了问题,程序崩溃,主线程还在,但是无法返回到主界面中去,因为主界面只有操作完成后才会重新显示出来),问题表达的可能不是很清楚,不知道各位有没有什么好思路,非常感谢!!!

------解决方案--------------------
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    var msg = e.ExceptionObject.ToString();
    var ss = string.Format("{0}发生系统异常。\r\n{1}\r\n\r\n\r\n", DateTime.Now, msg);
    File.AppendAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "系统异常.log"), ss);
}

------解决方案--------------------

一帮情况下要是你自己也无法找到原因和规律的话
可以从日志上面下手。通过写日志分析日志来查找原因。
------解决方案--------------------
收藏先,哈哈
------解决方案--------------------
多线程不好调试,出现问题很麻烦