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

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

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

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

这是什么原因

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

有没有办法克服这个问题

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

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

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

这是一个很好的SO消息泵 ,它驱动UI更新

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

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

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