c# - Winforms 应用程序停止绘图但仍对事件有反应

标签 c# winforms

我们有一个 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/

相关文章:

c# - 仅访问目录时获取目录下所有文件的属性

c# - 包含路径表达式必须引用 type.in 预加载中定义的导航属性

c# - 在 Designer 中使用时自定义 DataGridView 列重复

.net - 如何确定哪个控件正在吃掉我的键盘事件

c# - Move PictureBox using Arrow Keys - 处理 PictureBox 中的键盘事件

c# - 如何在windows窗体中显示Processing组件

c# - 如何使用 lambda 表达式在列表中设置多个值?

c# - 在 x64 模式下运行时可以生成 x86 哈希值吗?

c# - GridView 删除不起作用

c# - 执行 cmd.exe 时 Windows 窗体卡住