前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c#中Invoke方法

c#中Invoke方法

作者头像
全栈程序员站长
发布2022-07-01 14:42:20
1.1K0
发布2022-07-01 14:42:20
举报

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

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();

}));

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档