![cover](https://img-blog.csdnimg.cn/img_convert/fc5fa873823e4ec59b7cfb486073ba15.png)
Winform程序中UI更新延迟
在 WinForm 中,UI 更新通常是在 UI 线程上进行的,如果你在 UI 线程之外的地方修改了 UI 元素,可能会导致更新有延迟,单纯的使用delegate也不能及时的更新UI。最后,调用 EndUpdate 方法重新启用绘制,从而一次性更新界面,避免多次绘制导致的延迟。2)并非所有的 WinForm控件都直接提供了 BeginUpdate() 方法,对未提供此方法的控件可考虑暂时禁用界面重
·
在 WinForm 中,UI 更新通常是在 UI 线程上进行的,如果你在 UI 线程之外的地方修改了 UI 元素,可能会导致更新有延迟,单纯的使用delegate也不能及时的更新UI。经实践,最终实现方案如下:
this.Invoke((MethodInvoker)delegate//跨线程访问需放在委托中
{
skinListBox1.BeginUpdate();
skinListBox1.Items[StuIndex].Text = "此行为示例刷新UI的逻辑";
skinListBox1.EndUpdate();
});
这其中需要注意的是:
1)通过调用 BeginUpdate 方法,控件将暂时停止绘制,然后你可以执行修改操作。最后,调用 EndUpdate 方法重新启用绘制,从而一次性更新界面,避免多次绘制导致的延迟。
2)并非所有的 WinForm控件都直接提供了 BeginUpdate() 方法,对未提供此方法的控件可考虑暂时禁用界面重绘,待逻辑操作完之后再开启(这一条为思路,未实践)。
3)跨线程的访问需要放在委托中。否则会报错,具体在本示例中会提示:线程间操作无效: 从不是创建控件"skinListBox1"的线程访问它。
更多推荐
所有评论(0)