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函数时直接创建,但对我来说,它似乎是发送给代理的第二个参数。一旦找到答案,请将其标记为答案。这样其他人也可以使用它。这正是我等待的答案。非常感谢你说得那么清楚,占用了你的时间!我很高兴,你得到了答案。