Winform程序中UI更新延迟

在 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"的线程访问它。

相关推荐

  1. Winform程序UI更新延迟

    2024-03-15 03:10:02       38 阅读
  2. ubuntu运行c# winform程序

    2024-03-15 03:10:02       31 阅读
  3. WinForms 应用程序使用 SignalR 连接到服务器

    2024-03-15 03:10:02       35 阅读
  4. 【Android 线程】在子线程更新UI

    2024-03-15 03:10:02       56 阅读
  5. Qt篇——在线程更新ui控件

    2024-03-15 03:10:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 03:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 03:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 03:10:02       82 阅读
  4. Python语言-面向对象

    2024-03-15 03:10:02       91 阅读

热门阅读

  1. 爬虫:爬取新闻内容及图片,存入数据库

    2024-03-15 03:10:02       44 阅读
  2. 怎样把1.ts-10.ts的文件拼接成一个MP4文件

    2024-03-15 03:10:02       47 阅读
  3. C语言统计书本借阅情况

    2024-03-15 03:10:02       38 阅读
  4. linuxi系统docker容器编排工具compose

    2024-03-15 03:10:02       42 阅读
  5. 记一次实战项目所学(通用接口篇)

    2024-03-15 03:10:02       39 阅读
  6. Coinbase: AI+区块链的投资与创业机会

    2024-03-15 03:10:02       41 阅读
  7. C语言自学笔记5-----C 语言 if...else 语句

    2024-03-15 03:10:02       44 阅读