文档章节

委托

沉默狮
 沉默狮
发布于 2015/06/05 10:01
字数 573
阅读 22
收藏 0

winfrom界面委托

在对控件进行操作的时候,可以通过判断当前线程是否为控件所在线程外的线程。如果是,则调用Invoke。

private void AlertMessage(string message)
{
    if(InvokeRequired)
    {
        BeginInvoke(new Action<string>(AlertMessage), message);
    }
    else
    {
        MessageBox.Show(message);
    }
}

也可以直接通过控件类直接调用Invoke方法,底层代码会自己判断线程并将请求委托。

ConsoleTbx.Invoke(new Action<string>(AlertMessage),message);
private void AlertMessage(string message)
{
    MessageBox.Show(message);
}

wpf界面委托

可以通过控件进行委托

TextBox1.Dispatcher.BeginInvoke(new Action<bool>(DisableCameraButton), enable)

线程间委托

不同类不同线程

不同类之间不同线程使用事件,事件是一种特殊的委托。通过在一个类中将一个方法订阅给另一个类,在另声明了事件的类中调用。

需要注意的是,既然已经将方法委托出去,方法内代码所属线程必然是调用方所属线程,而不是方法实现所在类的线程中。

public class A
{
    public A()
    {
        B b = new B(); 
 
        b.OnEventTrigger += EventMethod;     
    }   
     
    // 自己实现的方法  
    // 其中参数e为方法调用时传递的DataArgs类型的对象 ,通过这个对象访问他的成员变量 
    private void EventMethod(object sender, DataArgs e)
    {
         ...// 方法实现 
    } 
} 
 
public class B
{
    public event EventHandler<DataArgs>  OnEventTrigger; 

    public void test()     
    { 
        if(OnEventTrigger != null) 
        {  
            DataArgs d = new DataArgs("Hello World!"); 
            OnEventTrigger(d);
        }  
    }  
} 

// 自己编写的事件所传递的参数类,继承与EventArgs类  
public class DataArgs : EventArgs
{
    public string Message {get; private set;}
     
    public DataArgs(string message) 
    {
         this.Message = message; 
    }  
}

同一个类不同线程

当在同一个类中,可以使用更为简单的委托来实现

public clas A
{ 
    private delegate void TestInvoke(string message);

       
 
}

匿名委托

匿名委托俗称闭包,就是将一段代码和其中涉及到的数据一起打包委托调用。

总所周知,在js中,闭包是最常见的一种匿名回调。

在C#中,我们称之为匿名委托。直接将方法体与数据委托调用,就是将这二者打包发送过去,让其调用。打包的过程就称之为闭包。

闭包时特别涉及到数据访问问题,方法体对父方法体内的数据拥有访问权限,能够在方法体中直接使用,回调时的数据是闭包时的数据复制。

© 著作权归作者所有

共有 人打赏支持
沉默狮

沉默狮

粉丝 10
博文 54
码字总数 25252
作品 0
成都
程序员
公证书样本 房产委托公证书样本 委托公证书样本

公证书样本 房产委托公证书样本 委托公证书样本公证书样本 房产委托公证书样本 委托公证书样本公证书样本 房产委托公证书样本 委托公证书样本公证书样本 房产委托公证书样本 委托公证书样本公...

我爱我家1
08/25
0
0
谈谈.Net 4.0 中的委托delegate

.Net中的委托从功能上讲和c语言或者c++中的方法指针类似,可以像调用方法一样调用委托完成某个功能,或返回某类结果。但是.Net毕竟是更高级的语言,委托Delegate也更高级了,委托是一种数据接...

长平狐
2012/06/08
76
0
Unity3D学习资源:委托和lambda表达式一

一.在C#中我们可以使用delegate关键字来声明一个委托,声明的格式如下: delegate <函数返回类型> <委托名> (<函数参数>) 下面我们来看一下代码是如何来写的: [C] 纯文本查看 复制代码 using ...

浩浩老师
2015/09/17
166
0
委托的简单用法

委托的用法简单示例一 usercontrols:里面写法如下: public delegate void ButtonClickHandler(); public event ButtonClickHandler ButtonClick; form1里面定义时间: this.usercontrols.But......

长平狐
2013/03/28
31
0
asp.net core mvc 管道之中间件

asp.net core mvc 管道之中间件 http请求处理管道通过注册中间件来实现各种功能,松耦合并且很灵活 此文简单介绍asp.net core mvc中间件的注册以及运行过程 通过理解中间件,将asp.net core ...

xxRed
09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一个可能的NEO链上安全随机数解决方案

0x00 困境 链上安全随机数生成应该算是一个比较蛋疼的问题,哪怕你的系统再牛逼,合约程序困在小小的虚拟机里,哪怕天大的本事也施展不开。 更悲催的是,交易执行的时候,是在每一个节点都执...

暖冰
59分钟前
1
0
【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部