0

我有一个继承 System.ComponentModel.Component 的类。该组件生成一个免费线程,该线程进行长时间的阻塞调用以等待外部事件。在我的 Dispose 中,线程被通知完成其调用并返回。我可以确定该应用程序将始终调用我的 Dispose 吗?如何确保我的线程不会逗留并阻止客户端应用程序终止?

4

2 回答 2

2

如何确保我的线程不会逗留并阻止客户端应用程序终止?

通过使线程成为后台线程Thread.IsBackground。这将阻止线程保持进程处于活动状态。

于 2012-09-21T19:28:18.010 回答
1

无法保证IDisposable.Dispose将在您的对象上调用它。您可以期望在所有正常情况下都会调用终结器。

由于 Dispose 只是约定,而不是要求您必须通过良好的编码实践和可能的终结器中的运行时检查来强制执行它(如果您愿意)。

不阻塞应用程序的好方法是不要进行长时间的同步调用。大多数 API 都有异步版本,更容易取消/忽略完成部分。如果你不能 - 按照 Reed Copsey 的建议使用 Thread.IsBackground。

于 2012-09-21T19:33:49.637 回答