理解C#中的Begininvoke args

时间:2013-10-29 08:57:16

标签: c# asynchronous delegates begininvoke

我用来浏览这个论坛以寻找答案,但这次我无法找出任何可以让我完全理解以下问题的内容。

我有这个程序:

IAsyncResult asrr;
        DELG d = (o) =>
        {
            short i = 10;
            string msg = (string)o;
            while (i > 0)
            {
                Console.WriteLine("Work - > {0}::{1}", i, msg);
                System.Threading.Thread.Sleep(1000);
                i--;
            }
        };
        asrr = d.BeginInvoke(((object)("T1")), (asr) =>
        {
            DELG dlg = (DELG)((System.Runtime.Remoting.Messaging.AsyncResult)asr).AsyncDelegate;
            dlg.EndInvoke(asr);
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("callback");
            Console.ForegroundColor = ConsoleColor.Gray;
        }, d);

然后我想我理解这里发生了什么:我们有一个使用asrr异步调用的委托。我们给代表'd'几个args:T1,它将显示在委托中,一个回调方法(我使用lambda方法,因为这在本练习中是必需的)和d,代表。

嗯,我真的没有得到它......我知道我们发送了T1,但是来自哪里“(asr)”?我不知道在begininvoke之后发生了什么,也没有:

DELG dlg = (DELG)((System.Runtime.Remoting.Messaging.AsyncResult)asr).AsyncDelegate;

在这里,我再次看到了asr,但却不明白。

我找到了这个链接: Delegates and Events 但即使它帮助了我,我仍然没有得到它的全部。 你能否提供一些有关它的信息?

非常感谢传入的答案。

3 个答案:

答案 0 :(得分:1)

进一步向他人添加'答案。

这是异步调用。

根据MSDN

BeginInvoke方法启动异步调用。它具有与要异步执行的方法相同的参数,以及另外两个可选参数。第一个参数是AsyncCallback委托,它引用异步调用完成时要调用的方法。第二个参数是用户定义的对象,它将信息传递给回调方法。 BeginInvoke立即返回,不等待异步调用完成。 BeginInvoke返回IAsyncResult,可用于监视异步调用的进度。

EndInvoke方法检索异步调用的结果。它可以在BeginInvoke之后的任何时间调用。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到完成为止。 EndInvoke的参数包括您要异步执行的方法的outref参数(<Out> ByRef and ByRef in Visual Basic),以及IAsyncResult返回的BeginInvoke }

请查看链接以获取更多信息。

答案 1 :(得分:0)

您在asr调用中声明BeginInvoke - 具有(asr) =>的部分是声明。推断出类型。

答案 2 :(得分:0)

asr是匿名委托的输入参数。 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx

委托具有带一个输入参数的签名。声明输入参数在大括号之间的功能块中称为asr