C# WinForm 跨线程访问控件
2023-12-13 23:54:28
写在前面
在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} 次执行";
}
});
执行结果:
文章来源:https://blog.csdn.net/rjcql/article/details/134984269
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!