2

我是 C# 新手,但我已经使用 VB6 编程很长时间了。我有一个非常简单的项目,运行时没有任何错误。但是有一个问题,它与 Windows 本身有关。如果我打开任何窗口(来自任何其他程序)并且该窗口与我的应用程序重叠......当我关闭那个“其他窗口”时,我的应用程序的窗口不会重新绘制与“其他窗口”重叠的部分。

每当 Windows Vista 的 Bubbles 屏幕保护程序启动时,都会发生同样的事情。当我摇动鼠标取消屏幕保护程序时,你猜怎么着???我的窗户上到处都是气泡。在 VB 中,我们有一个简单的“Window.Refresh”,瞧!然而,在 C# 中,这不起作用。我搜索了论坛,似乎提到了“刷新线程”。在这一点上我有点困惑。为什么事情不能简单?

4

2 回答 2

2

您可以调用Form.Invalidate使表单的客户区无效。这将导致它接收到绘制消息,并重新绘制自己。

这类似于 VB6 的刷新方法。

但是,这应该自动发生。但是,如果您的应用程序正在 UI 线程中进行某些处理,它将阻止它处理其消息,直到工作完成。如果是这种情况,您应该考虑使用BackgroundWorker(或其他方法)将工作推送到后台线程。

于 2011-02-07T17:43:27.800 回答
0

在 C# 中重绘 Form 不需要做任何特别的事情(当您将窗口带回顶部时,Form 应该可以正常重绘)。

你有任何第三方控件在玩吗?Control.Refresh() 确实存在于 C# 中,如果您应该能够从表单本身(通常this.Refresh()在您的表单的代码隐藏中)或任何具有子控件(如面板)中调用它。

于 2011-02-07T17:44:43.740 回答