0
点赞
收藏
分享

微信扫一扫

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

UI布局如下

委托定义如下:

public delegate void SetMessageDelegate(string message);

From1的代码如下:

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


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

        private void button1_ClickAsync(object sender, EventArgs e)
        {

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


    public delegate void SetMessageDelegate(string message);

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

运行结果如下:

举报

相关推荐

0 条评论