【发布时间】:2013-01-24 12:38:01
【问题描述】:
我在工作线程中使用了SetWindowHookEx() Windows API 并接收操作系统通知,我使用Application.Run() 运行了应用程序消息泵。
现在,我想停止消息泵并退出工作线程,但是我没有很好的方法来终止线程。
另外,我正在使用Thread.Abort() 方法来终止线程,但不推荐使用这种方法来优雅地终止线程。
谁能建议如何从 UI 线程或主窗体优雅地关闭消息泵,以便工作线程自动返回并退出?
【问题讨论】:
-
您可以将 BackgroundWorker 与 SupportsCancellation 一起使用吗?
-
如果您是基于 .NET4 的,我建议您查看 System.Threading.Tasks 中的 Task 对象。它有一个取消令牌,您可以使用它来中止操作。
-
您的应用程序是否同时运行两个消息泵?如果是这样……那可能很糟糕。您应该首先避免这样做,并重复使用单个泵。
-
Thread.Abort() 不再是“£@$ 曾经的可怕之处。它现在不是停止死去的东西,而是引发一个异常,可以用来优雅地释放任何锁和必要时提供资源