C# 对C语言中Begininvoke参数的理解#

C# 对C语言中Begininvoke参数的理解#,c#,asynchronous,delegates,begininvoke,C#,Asynchronous,Delegates,Begininvoke,我经常浏览这个论坛来寻找答案,但这次我想不出什么能让我完全理解下面的问题 我有一个程序: IAsyncResult asrr; DELG d = (o) => { short i = 10; string msg = (string)o; while (i > 0) { Console.WriteLine("Work - &g

我经常浏览这个论坛来寻找答案,但这次我想不出什么能让我完全理解下面的问题

我有一个程序:

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'几个参数:T1,它将显示在委托中,一个回调方法(我使用lambda方法,因为这在本练习中是必需的)和d,委托

我真的不明白。。。我知道我们发送T1,但“asr”从何而来?我不知道开始醒来后发生了什么,也不知道发生了什么:

DELG dlg = (DELG)((System.Runtime.Remoting.Messaging.AsyncResult)asr).AsyncDelegate;
在这里,我可以再次看到asr,但不理解它

我找到了这个链接: 但是,即使它帮助了我,我仍然不了解它的全部。 你能给我提供一些关于它的信息吗


非常感谢收到的答案。

您在
BeginInvoke
呼叫中声明了
asr
——具有
(asr)=>
的部分就是声明。将推断该类型。

asr是匿名代理的输入参数。 有关更多信息,请参阅


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

以进一步添加到其他人的答案中

这是异步调用

根据,

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

EndInvoke
方法检索异步调用的结果。它可以在
BeginInvoke
之后的任何时间调用。如果异步调用尚未完成,
EndInvoke
将阻塞调用线程,直到它完成。
EndInvoke
的参数包括要异步执行的方法的
out
ref
参数
(VisualBasic中的ByRef和ByRef)
,以及
BeginInvoke
返回的
IAsyncResult


查看链接了解更多信息。

我想他所问的是asr的价值来自何方。感谢您提供这些信息。但是这个输入参数不是前面的“((对象)(“T1”)”吗?因此,我理解asr在分配lambda函数时直接创建,但对我来说,它似乎是发送给代理的第二个参数。一旦找到答案,请将其标记为答案。这样其他人也可以使用它。这正是我等待的答案。非常感谢你说得那么清楚,占用了你的时间!我很高兴,你得到了答案。