c# 通过delegate委托向主线程发送信息

c# 通过delegate委托向主线程发送信息,第1张

概述c# windows编程,常会用到多线程,在新开的线程中要对主线程的页面数据进行更改时,需要通过delegate进行委托 public delegate void show(string info); //定义一个委托,参数为string private void add_info_event(string info) //定义一个方法,判断控件是否需要引用才可 *** 作,将该方法与委托进行绑定,并

c# windows编程,常会用到多线程,在新开的线程中要对主线程的页面数据进行更改时,需要通过delegate进行委托

 public delegate voID show(string  info); //定义一个委托,参数为string private voID add_info_event(string info) //定义一个方法,判断控件是否需要引用才可 *** 作,将该方法与委托进行绑定,并用Invoke调用该委托和传递参数。 {    if (this.txb_info.Invokerequired)    {       show d = new show(add_info_event);  //声明一个show委托,并且该委托指向add_info_event方法 this.Invoke(d,new object[] { info });  //引用该委托,并传递参数    }    else    {     add_info(info);  //调用真正的代码逻辑    }}

在新开线程代码中,直接调用add_info()属于跨线程 *** 作,无法 *** 控主线程内容,调用add_info_event()即可。

 

扩展:如果主form,生成一个子form,子form要对主form的进行通信,更改内容,也可以使用delegate和event相配合。

子form1:

   public delegate voID sendMessage(string message); //定义一个委托,发送消息 public event sendMessage sendTo; //声明一个事件,类型为sendMessage   调用sendTo(string message)向主窗体通信

主form:

Form1 form1=new Form1();
//主窗体的构造方法
public Form(){
 form1.show(); form1.sendTo
+= new Form1.sendMessage(SendArgs); //将子窗体的sendTo事件类型为sendMessage委托,并将委托与主窗体中的SendArgs方法绑定;} public delegate voID getMessage(string message); //定义一个委托,接收消息 private async voID SendArgs(string message)
{
if (this.DateListVIEw.Invokerequired)  //判断控件是否需要引用 { getMessage d = new getMessage(SendArgs); //声明一个getMessage委托,该委托指向SendArgs方法。 this.Invoke(d,new object[] { message}); //调用该委托,传递参数 } else { MessageBox.Show(message); }
}

子窗体发送消息,一个委托,一个事件sendTo

主窗体接收消息,一个委托

两个委托都指向主窗体的SendArgs方法

子窗体触发事件sendTo,即调用sendMessage委托,执行sendArgs方法,sendArgs方法判断更改控件需要引用来执行,则调用getMessage委托;

总结

以上是内存溢出为你收集整理的c# 通过delegate委托向主线程发送信息全部内容,希望文章能够帮你解决c# 通过delegate委托向主线程发送信息所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存