c#中Invoke方法

c#中Invoke方法invoke方法的初衷是为了解决在某个非某个控件创建的线程中刷新该控件可能会引发异常的问题。说的可能比较拗口,举个例子:主线程中存在一个文本控件,在一个子线程中要改变该文本的值,此时会有可能引发异常。为了避免该问题,需要在子线程中使用invoke方法来封装刷新文本内容的函数。Invoke或者BeginInvoke去调用,两者的区别就是Invoke会导致工作线程等待,而BeginIn

大家好,又见面了,我是你们的朋友全栈君。

invoke方法的初衷是为了解决在某个非某个控件创建的线程中刷新该控件可能会引发异常的问题。说的可能比较拗口,举个例子:主线程中存在一个文本控件,在一个子线程中要改变该文本的值,此时会有可能引发异常。

为了避免该问题,需要在子线程中使用invoke方法来封装刷新文本内容的函数。Invoke 或者 BeginInvoke 去调用,两者的区别就是Invoke 会导致工作线程等待,而BeginInvoke 则不会

using System.Threading;

       public delegate void MyInvoke(string str);//invoke方法创建委托
        private void btnStartThread_Click(object sender, EventArgs e)
        {

            Thread thread = new Thread(new ThreadStart(DoWord));
            thread.Start();
        }
        public void DoWord()
        {            
            MyInvoke mi = new MyInvoke(SetTxt);//实例化一个委托,并且指定委托方法
            BeginInvoke(mi,new object[]{“abc”}); //调用invoke方法           
        }

        public void SetTxt(string str)//委托对应的方法
        {

            txtReceive.Text += “invoke”;
        }

this.listView1.Invoke(new EventHandler(delegate
 {

          listView1.Items.RemoveAt(i);
  }));

或者

Invoke(new Action(()=>{

todo();

}));

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131179.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号