• .NET中Invoke和BeginInvoke


    在.NET中,固定必须主线程才能操作UI界面,如果在非主线程中强行对UI界面赋值,则会报错,跨线程操作UI,是不允许的,需要使用Invoke或BeginInvoke,关于这两个什么时候用,简单来讲,一个是同步,一个是异步,更深底层的话,查阅了相关资料,没看明白,扯到了windows程序消息机制去了,使用windows消息机制实现了封送,我是没看懂这个什么消息机制>_<。

    invoke 在拥有此控件的基础窗口句柄的线程上执行指定的委托。

    beginInvoke在创建控件的基础句柄所在线程上异步执行指定委托。
     

    用个简单的例子

     //invoke
                this.button1.Click += (sender, e) =>
                {
                    this.textBox1.Text += "AA";
                    this.Invoke(new Action(() =>
                    {
                        this.textBox1.Text += "Invoke";
                    }));
                    this.textBox1.Text += "BB";
                };


     

     //beginInvoke
                this.button2.Click += (sender, e) => {
                    this.BeginInvoke(new Action(() =>
                    {
                        this.textBox1.Text += "BeginInvoke";
                    }));
                    this.textBox1.Text += "AA";
                    this.textBox1.Text += "BB";
                    Thread.Sleep(1000);
                };


     

    invoke 是执行完了才会往下执行

    beginInvoke 不需要等待就往下执行,然后根据线程优先级执行
     

  • 相关阅读:
    Linux串口设备的使用<ubuntu>
    UE5——源码阅读——3——引擎退出
    开发者,MySQL专栏完更,助你轻松从安装到入门进阶
    算法---不同路径(Kotlin)
    AMS 新闻视频广告的云原生容器化之路
    《中秋佳节倍思亲》——2022年这场中秋
    java基于springboot+vue学生考勤签到请假管理系统84y43
    HBuilder发行微信小程序
    MATLAB : Plot函数及其用法
    Spring Event
  • 原文地址:https://blog.csdn.net/zhang8593/article/details/127333888