首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谁将BeginInvoke,Invoke和EndInvoke方法定义添加到类型委托?

在C#中,BeginInvokeInvokeEndInvoke方法是由System.Delegate类型定义的。System.Delegate是一个基类,用于表示委托,它是一种特殊的类型,用于封装方法。BeginInvokeInvokeEndInvoke方法用于异步调用委托所表示的方法。

  • BeginInvoke方法启动异步调用委托所表示的方法,并返回一个IAsyncResult对象,用于跟踪异步调用的状态。
  • Invoke方法同步调用委托所表示的方法,并返回方法的返回值。
  • EndInvoke方法用于结束异步调用,并获取方法的返回值。

在C#中,委托可以表示任何具有匹配签名的方法。这意味着,如果一个方法与委托的签名相匹配,则可以将该方法分配给该委托。

例如,以下代码定义了一个委托类型MyDelegate,并创建了一个MyDelegate实例,该实例表示名为MyMethod的方法:

代码语言:csharp
复制
public delegate void MyDelegate(int value);

public class MyClass
{
    public void MyMethod(int value)
    {
        Console.WriteLine("MyMethod called with value: " + value);
    }
}

MyClass obj = new MyClass();
MyDelegate del = new MyDelegate(obj.MyMethod);

在这个例子中,MyDelegate委托定义了一个方法,该方法接受一个整数参数,并且没有返回值。MyMethod方法与委托的签名相匹配,因此可以将其分配给MyDelegate委托。

总之,BeginInvokeInvokeEndInvoke方法是由System.Delegate类型定义的,用于异步调用委托所表示的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于C#委托三种调用的分享

* 答:Invoke方法的参数很简单,一个委托,一个参数表(可选), 而Invoke方法的主要功能就是帮助你在UI线程上调用委托所指定的方法。...Invoke方法首先检查发出调用的线程(即当前线程)是不是UI线程, 如果是,直接执行委托指向的方法,如果不是,它将切换到UI线程, 然后执行委托指向的方法。...不管当前线程是不是UI线程, Invoke都阻塞直到委托指向的方法执行完毕,然后切换回发出调用的 线程(如果需要的话),返回。 所以Invoke方法的参数返回值调用他的委托应该是一致的。...3、委托的异步调用通过BeginInvokeEndInvoke来实现。...可以在异步回调函数(类型为 AsyncCallback)中调用 AddHandler.EndInvoke,以获取最初提交的 AddHandler.BeginInvoke 的结果。 ?

74120
  • C#多线程之旅(4)——APM初探

    不惧面试:委托 对于第三个知识点,是因为委托定义了两个异步方法BeginInvokeEndInvoke。...callback, Object obj); public TResult EndInvoke(IAsyncResult result); } 定义一个委托时,会生成一个BeginInvokeEndInvoke...BeginInvoke:   1.第一个参数arg为委托定义相同的参数(可以为两个参数arg,委托的签名相同),可以传入到委托引用的方法;   2.倒数第二个参数callback为回调方法,当BeginInvoke...该接口对象用途     a.传递参数,它包含了对调用了BeginInvoke委托的引用,这里是Add方法的int类型的输入参数;     b.包含了BeginInvoke()的最后一个Object类型的参数...EndInvoke:   1.第一个参数接收BeginInvoke返回的IAnsyResult;   2.返回的TResult为委托引用的方法的返回值,这里是Add方法的int类型返回值 2.2 用委托来实现

    1.2K130

    .NET面试题系列 - 委托与事件

    定义委托 2. 创建委托的一个实例,并指向一个合法的方法(其输入输出委托本身相同) 3....总结 使用委托的异步编程模型(APM): 通过建立一个委托使用BeginInvoke调用委托来实现异步,通过EndInvoke来获得结果,但要注意的是,EndInvoke会令主线程进入阻塞状态,卡死主线程...这个密封类包括三个核心函数,Invoke方法赋予其同步访问的能力,BeginInvokeEndInvoke赋予其异步访问的能力。...Invoke方法的参数返回值同委托本身相同,BeginInvoke的返回值总是IAsyncResult,输入则除了委托本身的输入之外还包括了AsyncCallback(回调函数)一个object。...EndInvoke的输入总是IAsyncResult,加上委托中的outref(如果有的话)类型的输入,输出类型则是委托的输出类型

    1.2K20

    C# 委托进阶

    ,而MulticastDelegate类中包含Invoke()BeginInvoke()EndInvoke()等方法,所以间接的每个委托的实例也可以调用这些方法。...(2)、BeginInvoke()方法接受"动态"的参数个数类型,具体的参数个数是根据调用BeginInvoke方法委托所决定的,代码如下: public delegate void EventHandler1...,EventHandler委托接受两个参数stringint,所以BeginInvoke前两个参数也是stringint,这个是编译时,根据委托定义动态生成的. (3)、BeginInvoke()...方法接受"动态"的参数个数类型,但最后两个参数是确定的,一个是AsyncCallback(回调函数),另一个是object (4)、当在委托上调用BeginInvoke方法时,当委托对象只能包含一个方法...接下来说BeginInvoke方法的另外两个参数,一个是AsyncCallback是一个委托类型,它用于方法的回调,也就是当异步方法调用完毕时,自动调用的方法,它的定义为: public delegate

    88960

    普通方法调用,Invokebegininvoke三者的区别总结及异步与同步的区别总结

    (1)普通方法调用(直接调用)与Invoke()方法调用方法 使用的线程Id是一样的 即属于同步。...(2)BeginInvoke(,AsyncCallback callback,object asyncState)方法调用方法 则是启用了新的线程Id       属于异步 可通过 Thread.CurrentThread.ManagedThreadId...    获取当前线程的Id *委托类型BeginInvoke(,AsyncCallback callback,object asyncState)方法  异步调用的核心, BeginInvoke...输入输出变量:表式委托对应的实参。 第二个参数(AsyncCallback callback):回调函数,表示异步调用后自动调用的函数 ,共用一个线程id. ...EndInvoke监视BeginInvoke委托类型EndInvoke()方法:借助IasyncResult接口对象,不断查询异步调用是否结束。

    1.4K20

    C#学习笔记二: 委托事件的用法及不同.

    委托定义方法定义类似, 只是在定义的前面多了一个delegate关键字. 正文: 委托可以被视为一个更高级的指针,它不仅仅能把地址传指向另一个函数,而且还能传递参数,返回值等多个信息。...系统还为委托对象自动生成了同步,异步的调用方式,开发人员使用BeginInvokeEndInvoke方法就可以抛开Thread而直接使用多线程调用。...一, 委托 用IL 分析可看出Delegate继承自System.MulticastDelegate类,并自动生成BeginInvokeEndInvokeInvoke三种常见的方法。...Invoke方法是用于同步调用委托对象的对应方法,而BeginInvokeEndInvoke是用于以异步方式调用对应方法的。...1.1 简单的委托 当建立委托对象时,委托的参数类型必须与委托方法相对应。只要向建立委托对象的构造函数中输入方法名称example.Method,委托就会直 接绑定此方法

    641150

    .NET简谈组件程序设计之(异步委托)

    等一下我们就用这个定义委托来讲解委托的异步调用。。...Add添加到委托列表中,然后使用同步调用,也就是直接用委托实例调用。...(); 通过委托BeginInvoke来进行异步调用,那么这个方法在哪里定义的呢,是系统在背后默默的自动生成的,由于不同的委托签名使用的BeginInvoke也是不同的,所以这里必须是动态编译生成的...[MSDN:公共语言运行库会自动使用适当的签名为该委托定义 BeginInvoke EndInvoke 方法。] 在代码3中出现了IAsyncResult接口,这是异步状态接口,什么意思呢。...由于事件是基于委托的所以我们当然可以通过事件进行异步的调用订阅者的方法,但是不能像往常那样直接进行BeginInvoke,只有当委托列表中仅仅有一个委托方法时才能直接BeginInvoke,如果多余一个必须进行循环调用

    47010

    c#异步编程

    C# 异步编程:  不需要等待,谁先出结果谁先出来 声明委托 根据委托定义实现方法 异步调用 : (1)     创建委托变量并指向具体方法(代表方法) **通过委托异步调用方法: *委托类型BeginInvoke...(,AsyncCallback callback,object asyncState)方法  异步调用的核心, BeginInvoke(多线程能执行的原因)。...EndInvoke监视BeginInvoke委托类型EndInvoke()方法:借助IasyncResult接口对象,不断查询异步调用是否结束。...(4)获取异步执行的结果                任务的类型  res=委托变量.EndInvoke(result);                 EndInvoke()方法不断循环检测运算是否结束...总的思想:方法是通过委托变量的委托BeginInvoke()对象异步执行,EndInvoke()观察异步执行是否完 小知识:在异步中当子线程没有完成让主线程等待的做法    主线程等待异步执行完成的三种方法

    1K30

    C#中的委托事件 - Part.2

    现在我们来看下如何解决这个问题,先回顾一下之前我在C#中的委托事件一文中提到的内容,我说过,委托定义会生成继承自MulticastDelegate的完整的类,其中包含Invoke()、BeginInvoke...因为它的参数是在编译时根据委托定义动态生成的,其中前面参数的个数类型委托定义中接受的参数个数类型相同,最后两个参数分别是AsyncCallbackObject类型,对于它们更具体的内容,可以参见下一节委托方法的异步调用部分...在上面已经介绍过,BeginInvoke()除了最后两个参数为AsyncCallback类型Object类型以外,前面的参数类型个数与委托定义相同。...EndInvoke()方法接受IAsyncResult类型的对象(以及refout类型参数,这里不讨论了,对它们的处理返回值类似),所以在调用BeginInvoke()之后,我们需要保留IAsyncResult...BeginInvoke的另外两个参数分别是AsyncCallbackObject类型,其中AsyncCallback是一个委托类型,它用于方法的回调,即是说当异步方法执行完毕时自动进行调用的方法

    2.1K20

    C#委托二(委托类型)

    我们都应该清楚,在使用委托之前,先要定义一个委托类型,如下所示: delegate int MyDelegate(int a,int b); MyDelegate md =null; 既然叫做委托类型,...MulticastDelegate类 MultiDelegate类是一个特殊类(Special Class),System.Delegate类一样,该类只能够被编译器以及内置的工具类所继承,我们自定义的类是不能够显式的继承自该类的...Invoke方法 为了解释Invoke方法,我们先来回顾一下,当一个委托指向了一个方法时是如何调用的,代码如下所示: int c = this.md(a,b); 我们在调用委托,并执行该委托所指向的方法时...实际上,我们可以直接调用其Invoke方法,代码如下所示: int c = this.md.Invoke(a,b); 另外,与Invoke方法对应的BeginInvoke,是对Invoke方法的一个异步调用...,而EndInvoke是异步调用完成后的处理方法

    43710

    每个.NET开发都应掌握的C#委托事件知识点

    一、委托 委托方法引用的灵活利用 1、委托定义与使用 委托是一种数据类型,用于持有对一个或多个方法的引用。通过委托,你可以将方法作为参数传递给其他方法,实现回调机制,实现方法的动态调用。...使用`delegate`关键字可以声明委托类型,并创建委托实例来绑定具体方法。...//加微信号xbhpnet入群交流.NET求职技术 效果如下: 4、委托BeginInvoke方法实现异步 委托BeginInvoke 方法 EndInvoke 方法可以实现异步执行委托方法...二、事件 事件对象之间的松耦合通信 1、事件的定义与声明 事件是委托的一种特殊应用,用于实现发布-订阅模型。使用event关键字可以声明事件,并指定事件委托类型。...委托是一种通用的类型,用于引用方法并执行它们,而事件是委托的一种实现,允许对象订阅响应特定情况的通知,从而促进模块化可维护的代码设计。

    25310

    invokebegininvoke 区别——c#

    下面我们在来说下.NET中对invokebegininvoke的官方定义。 control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线程上执行指定的委托。...通过这个两段代码的测试比较,我们会发现其实invokebegininvoke所提交的委托方法都是在主线程中执行的,其实根据我invoke begininvoke定义我们要在子线程中来看这个问题,在...invoke例子中我们会发现invoke所提交的委托方法执行完成后,才能继续执行 DDD;在begininvoke例子中我们会发现begininvoke所提交的委托方法后,子线程讲继续执行DDD,不需要等待委托方法的完成...Windows消息值其实就是定义的一个数据结构,最重要的是消息的类型,它就是一个整数;然后就是消息的参数。消息的参数可以表示很多东西。 Windows提供了一些api用来向一个线程的消息队列发送消息。...Invoke or BeginInvoke Invoke或者BeginInvoke方法都需要一个委托对象作为参数。

    2.6K41

    C#使用BeginInvoke实现异步编程

    什么是BeginInvoke方法BeginInvoke方法委托(Delegate)类的一个成员,它允许你在一个新的线程中异步执行方法。它通常用于执行长时间运行的操作,以确保主线程保持响应性。...(iar); //获取异步执行结果 //委托类型EndInvoke()方法:借助IAsyncResult接口对象,不断查询异步调用是否结束。...在发起的线程中引用方法完成之后,发起的线程就会调用回调方法,由回调方法再调用EndInvoke之前处理异步方法的结果。...(因为异步函数回调函数都要用,所以定义成成员变量) private MyCalculator objMyCal = null; //【4】同时执行多个任务...("第{0}个计算结果为:{1}", result.AsyncState.ToString(), res); } //【2】根据委托定义一个方法:返回一个数的平方

    92440

    多线程,异步委托,同步委托几种方式的区别

    private void Window_Loaded(object sender, RoutedEventArgs e)         {             //通过子线程调用方法...ThreadStart(DoSomeThing));             a.IsBackground = true;             a.Start();             //虽然是异步委托... dothingsEvent = new DoThingsDelegate(DoSomeThing);             IAsyncResult result = dothingsEvent.BeginInvoke...(null, null);             dothingsEvent.EndInvoke(result);             //同步委托就更不行了             dothingsEvent.Invoke...();             //真正的异步委托  异步调用方法,与多线程相似             IAsyncResult result = dothingsEvent.BeginInvoke(

    38020
    领券