【问题标题】:Debug.Fail gives me a "Dispatcher processing has been suspended" errorDebug.Fail 给我一个“调度程序处理已暂停”错误
【发布时间】:2011-12-18 19:14:38
【问题描述】:

我的代码有问题,导致调用 Debug.Fail。我经常使用 Debug.Assert 和 Debug.Fail,因为它不仅可以即时通知我存在问题,还可以提供有关问题所在和位置的信息。

但这次 Debug.Fail 本身引发了更大的问题,因为 UI (WPF) 由于以下错误而冻结:

调度程序处理已暂停,但消息仍在处理中。

我可以做些什么来使 Debug.Fail 成功吗?我绝对不想让 Debug.Fail 周围的代码来检查是 Invoke 还是 BeginInvoke。

编辑:我想替换 DefaultTraceListener 可以解决问题?

【问题讨论】:

    标签: .net wpf dispatcher


    【解决方案1】:

    看起来你是 Debug.Fail 来自 DependencyProperty 更改回调。

    您可以在这里找到完整的答案:'Dispatcher processing has been suspended' InvalidOperationException when calling ShowDialog

    【讨论】:

    • 当我用谷歌搜索它时,我也看到了它,很可能在调用堆栈中存在属性更改回调方式。但是为什么当 Debug.Failing 时我必须关心这个呢?我真的不想为此烦恼线程问题。
    【解决方案2】:

    Debug.Fail 默认使用DefaultTraceListener。使用 ILSpy,我可以看到 DefaultTraceListener.Fail 调用了 AssertWrapper.ShowAssert。要解决此问题,请将DefaultTraceListener 替换为您自己的,在对AssertWrapper.ShowAssert 的调用周围有调度员警卫。

    瞧!现在您可以致电Debug.AssertDebug.Fail,而无需担心调度程序问题。

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 2014-06-20
      • 2018-03-26
      • 2016-05-12
      • 2019-11-04
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      相关资源
      最近更新 更多