我们有一个 C# .NET 3.5 UI 客户端应用程序,它在 Windows 7 的多显示器桌面环境(通常是 4 个屏幕)中运行。每隔一段时间,在运行其中几个应用程序后,屏幕就会停止重绘。
控件继续对点击或按键使用react,并且可以通过编程方式更新值,但不会重新绘制整个表单以反射(reflect)任何更改。例如,基于状态启用/禁用的按钮可能会保持灰色,但对点击有反应,反之亦然。单击时按钮不会动画。
解决方法:最小化并恢复窗口似乎可以解决问题。此后,应用程序开始正确绘制。
这个问题最令人沮丧的方面是,在编程方面,一切似乎都在正常运行。我们的日志中没有发现异常。系统事件日志中看不到任何内容。我们还没有找到一种方法来检测这种情况是否正在发生。
其他杂项:日志使用log4net,服务器通信层使用ZMQ
更新:
调用表单 Invalidate() 和 Update() 不能解决问题。
在屏幕之间拖动窗口时,它会在每个屏幕上显示不同的值。
最小化/恢复仍然可以解决问题。
最佳答案
如果没有看到应用程序和代码,我无法确定任何事情,但我最好的猜测是有人在复杂的更新之前调用了 .SuspendLayout()
,并且异常(可能被吞噬)阻止了从到达相应的 .ResumeLayout()
的代码。要对此进行测试,请尝试为表单添加一个调用 .ResumeLayout()
的按钮。
关于c# - Winforms 应用程序停止绘图但仍对事件有反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919311/