Может ли AsyncCallback использовать нестатический делегат? - PullRequest
3 голосов
/ 30 июля 2010

Я использую удаленное взаимодействие .net с асинхронными вызовами функций для обработки ipc моего текущего проекта.

Я столкнулся с проблемой, когда я хотел бы, чтобы клиент:

  1. A Синхронно запрашивал информацию
  2. Продолжайте загрузку графического интерфейса пользователя
  3. Когда вызов ASynchronous завершен, загрузите его в графический интерфейс

Я делаю это с помощью следующего кода

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

В приведенном выше примере RecceiveSomething ДОЛЖЕНбыть статическим методом в этом примере.Это почему?Если бы я мог сделать эту функцию нестатичной, я мог бы загрузить свой графический интерфейс и все хорошо.

Мое решение состоит в том, чтобы RecieveSomething запускал статическое событие, на которое подписывается мой графический интерфейс.Это обременительно, поскольку теперь для обработки моего 1 асинхронного вызова функции потребуется 2 делегата и событие.

Есть ли способ заставить AsyncCallback работать с нестатической функцией?

Спасибо!

1 Ответ

3 голосов
/ 31 июля 2010

Вы можете использовать нестатический метод для вашего AsyncCallback делегата. Вы просто должны указать это правильно. Например, чтобы использовать this->ReceivedSomething:

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