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

时间:2010-07-30 19:54:52

标签: c# .net remoting ipc iasyncresult

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

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

  1. 异步请求信息
  2. 继续加载GUI
  3. 当ASynchronous调用完成后,将其加载到gui
  4. 我使用以下代码执行此操作

      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 个答案:

答案 0 :(得分:3)

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

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