【问题标题】:Component dispose consistency组件配置一致性
【发布时间】:2012-09-21 19:26:12
【问题描述】:

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

【问题讨论】:

    标签: c# winforms multithreading controls


    【解决方案1】:

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

    将线程设为background thread via Thread.IsBackground。这将阻止线程保持进程处于活动状态。

    【讨论】:

    • 请注意,这不会“触发” Dispose 方法。
    • @Emo 否 - 它只是阻止线程阻止应用程序终止。不过,使用过的组件通常由其容器处理 - 但我想解决这个问题,因为它似乎是这里问题的根源。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 2022-01-13
      相关资源
      最近更新 更多