Как использовать DispatcherOperationCallback в vb.net

У меня проблема с переносом c# на vb.net при использовании DispatcherOperationCallback.

Я попытался преобразовать его на основе помощи для преобразования анонимного c# в vb. нетто

Я использую VS2010.

У меня есть такой код С#:

    public void Callback(Contract contract)
    {
        Dispatcher.BeginInvoke(DispatcherPriority.Normal,
              (DispatcherOperationCallback)delegate(object arg)
              {
                  Contract obj = (Contract)arg;
                  txtRequest.Text = HandleArgument(obj);                      
                  return null;
              }, contract);
    }

И после того, как я попытался перейти на vb.net вот так

Public Sub Callback(ByVal contract As Contract) Implements IServiceCallback.Callback

    Dispatcher.BeginInvoke(New DispatcherOperationCallback(Sub(arg As Object)
                                                           txtRequest.Text = HandleArgument(DirectCast(arg, Contract))
                                                           End Sub), DispatcherPriority.Normal, contract)

End Sub

но это не сработало. Отображаемый vs2010 «вложенная подпрограмма не имеет подписи, совместимой с делегатом «Функция делегирования DispatcherOperationCallback (arg As Object) As Object»

Спасибо за помощь.


person tong    schedule 27.03.2011    source источник


Ответы (1)


Просто прочитайте сообщение об ошибке:

nested sub does not have a signature that is compatible with delegate 
  "Delegate Function DispatcherOperationCallback(arg As Object) As Object

поэтому вы должны изменить свой код соответствующим образом.

Public Sub Callback(ByVal contract As Contract) Implements IServiceCallback.Callback
    Dispatcher.BeginInvoke(
      New DispatcherOperationCallback(
          Function(arg As Object)
              txtRequest.Text = HandleArgument(DirectCast(arg, Contract))
              Return Nothing ' // you need to check what should be returned here '
          End Function), 
         DispatcherPriority.Normal, 
         contract)
End Sub
person Paulo Santos    schedule 27.03.2011
comment
По сути, мне не нужно ничего возвращать. Я просто хочу передать arg функции HandleArgument, чтобы выполнить некоторую задачу и вернуть строку обратно в TextBox с именем txtRequest. Это все. - person tong; 27.03.2011
comment
Это может быть правдой, но DispatcherOperationCallback ожидает функцию, а не метод. - person Paulo Santos; 27.03.2011