如何跨线程访问Winform中的UI元素
如何跨线程访问Winform中的UI元素
假如制作一个Socket聊天应用程序,很可能会用到多线程;
例如为Receive方法开辟单独一个线程,例如为Receive方法开辟单独一个线程(后台运行的线程IsBackGround=true);
然而Winform的UI控件都是运行在主线程中的,如果从其他线程直接访问UI控件,系统就会报错;
public void Show(string s) { listBox1.Items.Add(s); }
那么如何才能在其他线程访问主线程,并且向UI控件传递数据呢?
有两种方法可以选择:
一、用BeginInvoke
public void ShowMessage(string message) { BeginInvoke(new Action<string>((msg) => listBox1.Items.Add(msg)), new object[] { message }); }
二、用委托
//声明委托 public delegate void ShowMsg(string s); //委托要绑定的方法 public void Show(string s) { listBox1.Items.Add(s); } //在多线程中调用的方法,不会报错的方法 public void ShowMessage(string message) { //实例化委托,并绑定方法 ShowMsg OnShowMsg = new ShowMsg(Show); //如果是跨线程的执行if代码块 if (this.InvokeRequired) { this.Invoke(OnShowMsg, message); } //如果不是跨线程的,执行else代码块 else { Show(message); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律