打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#利用Invoke和委托实现子线程更新UI(方式1)

zxy2847225301
已于 2022-04-04 18:46:53 修改
阅读量2k
收藏 1
点赞数
分类专栏: C#编程 多线程 文章标签: 子线程 委托 C# UI更新 多线程
于 2022-04-04 18:45:38 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
版权
111 篇文章 7 订阅
订阅专栏
8 篇文章 1 订阅
订阅专栏

UI布局如下

委托定义如下:

public delegate void SetMessageDelegate(string message);

From1的代码如下:

  1. public partial class Form1 : Form {
  2. SetMessageDelegate setMessageDelegate = null;
  3. public Form1()
  4. {
  5. InitializeComponent();
  6. setMessageDelegate += SetMessageMethod; //注册委托回调
  7. Console.WriteLine("UI初始化线程Id:" + Thread.CurrentThread.ManagedThreadId);


  8. }
  9. public void SetMessageMethod(string message)
  10. {
  11. Console.WriteLine("UI线程Id:" + Thread.CurrentThread.ManagedThreadId);
  12. this.textBox1.Text = message;
  13. }

  14. private void button1_ClickAsync(object sender, EventArgs e)
  15. {

  16. Task.Run(() =>
  17. {
  18. Console.WriteLine("Task子线程Id:" + Thread.CurrentThread.ManagedThreadId);
  19. this.button1.Invoke(setMessageDelegate, "要传递的数据");
  20. //this.textBox1.Invoke(setMessageDelegate, "用textBox1的Invoke也行");
  21. });
  22. }
  23. }


  24. public delegate void SetMessageDelegate(string message);

代码太简单了,不解释,注意观察输出的线程Id

运行结果如下:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
.NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
C# Await
C#中Invoke的用法()
C# 线程池基础上 - 猪悟能'S博客 - 博客园
C#线程本地存储:LocalDataStoreSlot和ThreadLocal<T>
C#多线程:异步事件调用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服