从线程内部退出线程

时间:2013-10-23 17:27:23

标签: c# multithreading

如果得到以下情况:

  1. Thread0正在运行调用其他组件的代码。
  2. 调用Component0并调用Thread0并触发事件。
  3. Eventhandler尝试通过设置stopflag
  4. 来停止thread0
  5. 现在我通常会加入Thread0,等到清理完所有东西后就完成了。但如果我这样做,我会陷入僵局。所以我要说,我只是将标志设置为退出完成Thread0为true并返回到Component0事件的Eventhandler。
  6. Eventhandler的下一行尝试处理Thread0正在使用的资源。记住:Thread0仍然在运行,因为我不能等待它,因为尝试停止Thread0的事件处理程序在Thread0的上下文中执行。
  7. 现在,Eventhandler已完成,Thread0尝试使用先前处理的资源>导致未知行为。
  8. 目前我在处理所有组件后是否正确请求标志是否已被处置。如果它被处理掉了,我打破了退出线程。

    是否有更好的模式来处理这种复杂的行为。

1 个答案:

答案 0 :(得分:1)

  

Eventhandler的下一行尝试处理资源Thread0正在使用

这是你的问题。您正试图从外部作用域释放资源,这通常会导致问题。

您是否有一个限制,不允许您在执行结束时确定性地释放thread0使用的资源?如果是这样,请发布更多解释。也许是一个简化的代码示例。

此外,线程和事件处理程序之间的区别在这里是不合适的。根据您的描述,我理解事件处理程序的代码在thread0上执行。所以你应该谈论在一个接一个地执行一个接一个的2个或更多个组件,其中一个组件在同一个线程上执行一些在它之后运行的组件。