AsyncCallback 可以使用非静态委托吗?

Posted

技术标签:

【中文标题】AsyncCallback 可以使用非静态委托吗?【英文标题】:Can AsyncCallback use a non-static delegate? 【发布时间】:2010-07-30 19:54:52 【问题描述】:

我正在使用 .net 远程处理,通过异步函数调用来处理我当前项目的 ipc。

我遇到了一个问题,我希望客户:

    A同步请求信息 继续加载 GUI ASynchronous 调用完成后,将其加载到 gui 中

我用下面的代码来做这个

  GetFileTextDelegate ^svd       = gcnew GetFileTextDelegate(obj, &BaseRemoteObject::GetFileText);
  AsyncCallback       ^callback  = gcnew AsyncCallback(RecievedSomething);
  IAsyncResult        ^arValSet  = svd->BeginInvoke(callback, nullptr);

在上面的例子中,RecievedSomething在这个例子中必须是一个静态方法。这是为什么?如果我可以使这个函数成为非静态的,我可以加载我的 gui,一切都很好。

我的解决方案是让 RecievedSomething 触发我的 gui 订阅的静态事件。这很麻烦,因为它现在需要 2 个委托和一个事件来处理我的 1 个异步函数调用。

有没有办法让 AsyncCallback 与非静态函数一起工作?

谢谢!

【问题讨论】:

+1 表示写得很好的问题。 -1 用于使用 C# 标记,然后编写 C++CLI 代码。 看着 C++CLI 可耻、丑陋的烂摊子,我晕船了。 【参考方案1】:

您可以为您的AsyncCallback 委托使用非静态方法。您只需要正确指定它。例如,使用this->ReceivedSomething

AsyncCallback ^callback  = gcnew AsyncCallback(this, &MyClassType::RecievedSomething);

【讨论】:

我会在星期一早上第一件事尝试一下,谢谢!我没有把两个和两个放在一起,意识到 AsyncCallback 只是一个委托,它的构造函数应该像一个一样运行。

以上是关于AsyncCallback 可以使用非静态委托吗?的主要内容,如果未能解决你的问题,请参考以下文章

JS Async Callback

AsyncCallBack - 它必须是静态的/它是不是必须返回 void?

可以将静态类设置为 UItextfield (Objective C) 的委托吗?

TcpListener的BeginAcceptTcpClient方法的两个参数是啥意思

异步使用委托delegate --- BeginInvoke和EndInvoke方法

C# 多线程初级汇总