2

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

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

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

4

3 回答 3

3

这是什么原因

在调试时,您实际上是在阻塞 UI 线程 - 您正在手动单步执行其执行流程。当您停止执行 UI 线程时,它无法绘制 UI。

有没有办法克服这个

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

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

于 2013-03-06T18:26:22.020 回答
0

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

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

于 2013-03-07T01:04:50.283 回答
0

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

这是关于消息泵的一个很好的 SO,它是推动 UI 更新的原因

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

于 2013-03-06T18:26:05.700 回答