是否存在类似Thread.OnAborting()的事件?

Oti*_*iel 1 c# multithreading exception

环境:

假设我有一个主要应用程序:

  • 听取任务要求,
  • 一个接一个地执行那些任务(使用一些资源(在物理意义上)),
  • 必须能够立即停止待处理任务以处置资源.

我有两个计时器:

  • timer1勾选时,应用程序正在检索新请求并将它们存储在a中Queue,
  • timer2勾选时,应用程序将请求以新的方式执行任务Thread.

当用户要求停止所有任务以释放资源时,我打算简单地杀死运行当前任务的线程Thread.Abort().

问题:

我希望能够在从线程类中杀死线程时保存一些最后的配置.

题:

有没有办法检测线程何时被杀死,如Thread.OnAborting()事件?

或者也许我可以ThreadAbortException在调用Thread.Abort()方法时捕获引发的?(如果是这样,我真的不知道该怎么做,你能提供一些代码示例吗?)

Bri*_*eon 5

除了捕捉ThreadAbortException没有其他机制存在.当然,你真的不想打电话Thread.Abort,因为ThreadAbortException异步注入和那些注入点是不可预测的.例如,它可能处于写入的中间,这可能使整个AppDomain处于损坏状态..NET 2.0增加了约束执行区域,这使得处理线程中止更安全,更容易处理,但是编写一个可以保证AppDomain不会被破坏的代码块仍然非常困难.我的建议是坚持这个Thread.Abort想法.

相反,您想要做的是向线程发送信号并允许它自己优雅地终止.这可以通过以下机制完成.

  • 民意调查
  • 使用等待句柄
  • 呼叫 Thread.Interrupt
  • 使用长期运行的API内置的取消机制

您可以在此处查看我的答案以获取更多信息.