【问题标题】:WPF: How to refresh a window while debugging?WPF:调试时如何刷新窗口?
【发布时间】:2010-11-03 04:27:46
【问题描述】:

我正在调试由一组 ViewModel 表示的算法。为了调试此算法,我想在逐步执行部分算法时重绘视图。这可能吗? (我宁愿只重绘,而不是做他们所谓的“DoEvents”来处理所有事件。)

【问题讨论】:

    标签: .net wpf debugging refresh


    【解决方案1】:

    这个blog post 建议你显示一个 MessageBox。我认为他假设你正在使用 WinForms,但这对于 WPF 可能以同样的方式工作。

    【讨论】:

    • 我的窗口包含高度图形化的信息,我想在调试期间刷新这些信息。消息框不会比调试器监视或跟踪点有用。
    • 我想你可能误解了这个建议。博客文章不建议在 MessageBox 中写入任何文本,它建议从调试器调用 MessageBox.Show 以强制重绘。这类似于您在原始消息中所写的从调试器中调用 Application.DoEvents,但正如博文底部的讨论所述,它有一些优势:DoEvents 只是排空队列然后返回。眨眼,你就会错过它。如果您需要重新排列窗口以使表单可见,这可能是一个问题。 MessageBox 将等待点击。
    【解决方案2】:

    唉,当您的调试器在断点处停止时,调试器将暂停您应用程序中的所有线程。我有类似的问题,这就是我所做的。

    1) 我没有设置断点,而是放置了带有非常详细信息的跟踪点。在 Visual Studio 中,如果你加上花括号,比如 {abc} ,变量 ABC 的值将输出到标准输出

    2) 记录。当您无法暂停程序时,它非常有用

    3) 结构化异常处理。如果在遇到问题时抛出异常,则可以在程序因错误开始展开时更轻松地进行跟踪。

    4) 尽可能多地断言。这样,如果您的程序没有停止,则意味着算法中的一切都很好。

    【讨论】:

    • 太糟糕了。我正在调试图形问题,因此基于文本的输出是一种麻烦的方法。原则上应该可以在调试期间刷新屏幕,因为我听说 WPF 的渲染器运行在与主应用程序不同的线程上。如果可以让线程在调试期间运行,那就太好了……
    猜你喜欢
    • 2010-10-29
    • 2011-06-22
    • 2015-01-08
    • 2012-12-20
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    相关资源
    最近更新 更多