C# WinForm 跨线程访问控件

写在前面

在WinForm开发中,经常会碰到主线程代码运行过程中需要刷新窗体控件的情况,如果直接在其他线程中去操作窗体控件,这时会抛出线程间操作无效的异常信息,因为窗体控件是由主线程创建的,C#强制要求代码必须是线程安全的,所以不允许跨线程访问。需要使用控件的Invoke方法,通过拥有控件的基础窗口句柄的线程来执行。

异常信息如下:

改成如下代码就可以了 

代码实现

    Action<int> setText = (i) => { this.lblMessage.Text = $"第 {i} 次执行";  };
    var task = Task.Factory.StartNew(() => {

        for (int i = 0; i < 100; i++)
        {
            Thread.Sleep(1000);
            lblMessage.Invoke(setText, i);
            //lblMessage.Text = $"第 {i} 次执行";
        }                
    });

执行结果:

相关推荐

  1. 线保持上下文

    2023-12-14 00:30:02       38 阅读
  2. Qt如何保证调用时候的线安全

    2023-12-14 00:30:02       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-14 00:30:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-14 00:30:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-14 00:30:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-14 00:30:02       20 阅读

热门阅读

  1. 返回值的作用,用法

    2023-12-14 00:30:02       37 阅读
  2. springboot 获取路径

    2023-12-14 00:30:02       36 阅读
  3. 55.跳跃游戏

    2023-12-14 00:30:02       33 阅读
  4. Ubuntu MQTT mosquitto

    2023-12-14 00:30:02       40 阅读
  5. leetcode 打家劫舍 总结

    2023-12-14 00:30:02       38 阅读
  6. AI:101-基于深度学习的航空影像中建筑物识别

    2023-12-14 00:30:02       44 阅读
  7. 2023.12.13 libstdc++ undefined reference to GLIBCXX

    2023-12-14 00:30:02       46 阅读