步进调试模式时,GUI不会重绘

时间:2013-03-06 18:23:58

标签: c# .net winforms .net-2.0

在任何.NET 2.0 Winforms应用程序中,如果您在调试模式下运行代码,并且您遇到了断点或以其他方式逐行进入代码,并且您想要查看正在调试的应用程序的GUI,那么.NET不会绘制应用程序屏幕。

例如,我有一个应用程序将一些消息写入Form上的TextBox。当我逐步调试代码,或者遇到断点时,我想查看TextBox中记录的所有消息,但是如果我按下Alt-Tab从VS2005窗口切换到WinForms应用程序窗口,我看到的全部内容是白色。在VS2005中以调试模式按F5之前,表格不会重新绘制。

这是什么原因,有没有办法克服这个问题,而不在代码中引入任何线程?

3 个答案:

答案 0 :(得分:3)

  

这是什么原因

当你正在调试时,你正在有效地阻止UI线程 - 你正在手动逐步执行它的执行流程。在您停止执行UI时,UI线程无法绘制UI。

  

并且有办法克服这个

您可以尝试手动调用Application.DoEvents(),但我通常会建议不要这样做。

最好等到方法结束并让UI正常重绘。如果你的方法很长(就时间而言),那么请记住,当调试时,UI仍然无法在执行该方法时自行更新。这可能会导致您改变您的设计(很难从我们目前获得的信息中分辨出来)。

答案 1 :(得分:0)

原因是因为您只能有一个UI线程,并且当您输入更新该代码的方法时,代码开始阻止UI线程。在您的方法退出之前,它不会更新。

Here is a good SO on message pumps,这是驱动UI更新的原因

您应该能够使用Add Watch/Quick Watch查看调试时的任何值。无论如何,这听起来像你真正想要的。

答案 2 :(得分:0)

就像其他人在答案和评论中所说的那样,UI线程被阻止,因此无法重绘。

但是,如果你想要做的只是看到 GUI,而不是与它交互,那么你正在运行Windows 7/8(这听起来不太可能,因为你使用的是VS2005)和避风港禁用aero peek,您可以将鼠标悬停在任务栏中的应用程序上,Windows将显示预览缩略图。当您将鼠标悬停在缩略图上时,即使断点阻止了UI线程,也可以“查看”应用程序。