了解 C# 中的 Begininvoke 参数
本文关键字:参数 Begininvoke 中的 了解 | 更新日期: 2023-09-27 18:37:27
我曾经浏览这个论坛来寻找答案,但这次我只是想不出任何能让我完全理解以下问题的东西。
我有这个程序:
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,但不理解它。
我找到了这个链接:参会代表和活动但即使它帮助了我,我仍然没有得到全部。你能给我一些关于它的信息吗?
非常感谢收到的答案。
进一步补充别人的答案。
这是异步调用。
根据 MSDN ,
BeginInvoke
方法启动异步调用。它具有与要异步执行的方法相同的参数,以及两个额外的可选参数。第一个参数是一个AsyncCallback
委托,它引用异步调用完成时要调用的方法。第二个参数是将信息传递到回调方法的用户定义对象。 BeginInvoke
立即返回,并且不等待异步调用完成。 BeginInvoke
返回一个IAsyncResult
,可用于监视异步调用的进度。
EndInvoke
方法检索异步调用的结果。它可以在BeginInvoke
后的任何时间调用。如果异步调用尚未完成,EndInvoke
将阻止调用线程,直到它完成。EndInvoke
的参数包括要异步执行的方法(<Out> ByRef and ByRef in Visual Basic)
的out
和ref
参数,以及BeginInvoke
返回的IAsyncResult
查看链接以获取更多信息。
您正在声明BeginInvoke
调用中的asr
- 具有(asr) =>
的部分是声明。推断类型。
asr
是匿名委托的输入参数。有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx。
委托具有一个带有一个输入参数的签名。 在大括号之间的功能块中声明要引用的输入参数asr
。