如何防止应用程序终止导致的线程中止?

时间:2012-11-17 22:38:56

标签: .net multithreading timer

如果例程通过System.Threading.Timer定期运行,可以采取哪些措施来防止此例程因主机应用程序终止而中途中止?

3 个答案:

答案 0 :(得分:0)

好吧,如果申请终止,你不可能做任何事情;但是,如果打开非后台线程,可以阻止隐式应用程序终止,退出main(关闭主窗口等)。

您可以让计时器在该线程上运行,但是您无法使用System.Threading.Timer,因为它在线程池线程(后台线程)上运行。你可以。 G。在该线程上启动一个调度程序并运行DispatcherTimer(如果您使用的是WPF)。

答案 1 :(得分:0)

无法保证您的线程不会异常终止。任何数量的事情都可能出错:意外停电,用户使用任务管理器终止应用程序,或者程序中发生崩溃线程的错误只有三种可能。

如果您正在进行多阶段数据库更新,如果中断,将使您的数据库处于损坏或不一致状态,那么您应该使用事务。

答案 2 :(得分:0)

此代码应导致主线程阻塞10秒钟,等待任何排队的计时器回调完成。这可以在主机应用程序的退出点运行。

Dim waitHnd As WaitHandle = New AutoResetEvent(False)
Timer1.Dispose(waitHnd)
waitHnd.WaitOne(10000)