gpt4 book ai didi

c# - 理解C#中的Begininvoke args

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:18 26 4
gpt4 key购买 nike

我过去常常浏览这个论坛来寻找答案,但这次我只是想不出任何能让我完全理解以下问题的东西。

我有这个程序:

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 异步调用的委托(delegate)。我们给委托(delegate)“d”几个参数:T1,它将显示在委托(delegate)中,一个回调方法(我使用 lambda 方法,因为这是在这个练习中需要的)和 d,委托(delegate)。

嗯,我不太明白...我知道我们发送了 T1,但是“(asr)”来自哪里?我没有得到 begininvoke 之后发生的任何事情,也没有得到什么:

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

在这里我又能看到 asr 但不明白。

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

非常感谢收到的答复。

最佳答案

进一步补充其他人的答案。

这是异步调用。

根据 MSDN ,

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

EndInvoke方法检索异步调用的结果。 BeginInvoke之后随时可以调用.如果异步调用尚未完成,EndInvoke阻塞调用线程直到它完成。 EndInvoke的参数包括 outref参数 (<Out> ByRef and ByRef in Visual Basic)要异步执行的方法的名称,加上 IAsyncResultBeginInvoke 返回

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

关于c# - 理解C#中的Begininvoke args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19653645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com