UI更新未按预期顺序发生

时间:2010-05-30 19:19:39

标签: c# .net winforms

我有一个Panel,它在网格布局中托管了许多子控件。子控件每个都包含一个带有PictureBox和Label的Panel。当单击其中一个子控件时,它将变为“选中”(基本上需要将其背景更改为不同的颜色)并触发事件。在此事件的处理程序中,图像显示在PictureBox中的单独表单上。

在代码中,在触发事件之前,子控件的背景肯定会被更改,但由于某种原因,它永远不会在运行时更新,直到之后图像已更新为另一个表格。在尝试触发事件之前,我尝试了Invalidate()和Refresh()子控件,但没有效果。

为什么会发生这种情况,我该怎么做才能正确设置?

2 个答案:

答案 0 :(得分:0)

如果我没记错的话,与事件关联的方法会在引发事件的同一个线程中执行,因此UI线程会被阻塞,并以单独的形式执行图片更改。作为解决方案,使用额外的线程(例如,通过ThreadPool)来执行事件。这样,代码将继续,UI可以重新绘制。

答案 1 :(得分:0)

请尝试这样:一旦你改变了背景颜色,就去做Application.DoEvents();之后,另一种形式的事件发生了。