我过去常常浏览这个论坛来寻找答案,但这次我只是想不出任何能让我完全理解以下问题的东西。
我有这个程序:
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)”从哪里来?我没有得到 begininvoke 之后发生的任何事情,也没有得到什么:
DELG dlg = (DELG)((System.Runtime.Remoting.Messaging.AsyncResult)asr).AsyncDelegate;
在这里我再次可以看到 asr 但不明白。
我找到了这个链接: Delegates and Events 但即使它帮助了我,我仍然没有得到它的全部。你能给我一些关于它的信息吗?
非常感谢收到的答案。