【问题标题】:How to prevent control update thread time out?如何防止控制更新线程超时?
【发布时间】:2011-07-05 05:44:24
【问题描述】:

问题似乎是,例如,更新 TextBox 的操作是否使用它所绑定的属性值。如果该属性需要太长时间才能产生所述值,那么更新文本框值的线程会杀死自己吗? (我不确定,只是假设)。这导致我在垃圾收集和非托管代码方面出现一些问题。

我认为正在发生的事情是更新线程死了,然后我对非托管代码的引用被垃圾收集,但非托管代码随后执行,但从我的托管代码发送的对象已被破坏,导致我的 un -托管代码。

以下是与此问题相关的警告: 对类型为“...”的垃圾收集委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。将委托传递给非托管代码时,托管应用程序必须使它们保持活动状态,直到保证它们永远不会被调用。

谁能告诉我如何防止这个问题发生?

【问题讨论】:

    标签: .net wpf .net-4.0 garbage-collection


    【解决方案1】:

    在你的类中保留一个委托的引用,以防止它被垃圾收集。

    阅读this了解详情或阅读Collected delegate problem

    【讨论】:

      【解决方案2】:

      您是否尝试过使用 Binding 扩展的 IsAsync 属性?

       {Binding ZZ, IsAsync=true}
      

      这会将您的执行委托放入 ThreadPool 并在获得结果后返回结果,同时阻止 GUI 线程阻塞

      【讨论】:

        猜你喜欢
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        相关资源
        最近更新 更多