Вызов асинхронного метода в MVVM silverlight - PullRequest
2 голосов
/ 12 июня 2011

Столкновение с некоторыми проблемами вызова методов в Silverlight. Вот сценарий: -

Мой агент службы содержит метод, вызывающий метод в службе WCF. Вот как я звоню:

   public void GetMethod(EventHandler<GetMethodCompletedEventArgs> callback)
    {
        _Proxy.GetMethodCompleted += callback;
        _Proxy.GetMethodAsync();
    }

Я вызываю этот метод в модели просмотра следующим образом

private void SomeMethod()
{
ServiceAgent.GetMethod(inputVariable, new EventHandler<GetMethodCompletedEventArgs>(OnGetMethod_Completed));
}

void OnGetMethod_Completed(GetMethodCompletedEventArgs e)
{
int result = e.Result;
}

Я прикрепил метод в модели представления к кнопке в пользовательском интерфейсе.

Теперь проблема в том, что если я нажимаю кнопку в первый раз, все работает нормально, если я нажимаю ее дважды, OnGetMethod_Completed () выполняется 2 раза за одно нажатие кнопки (т.е. нажатие 2-й кнопки), когда я нажимаю ее в третий раз он исполняется 3 раза и так далее ... Я действительно не понимаю, почему это происходит, если кто-то знает, пожалуйста, помогите мне.

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 12 июня 2011

вам нужно отменить регистрацию в завершенном событии на вашем OnGetMethod_Completed

void OnGetMethod_Completed(GetMethodCompletedEventArgs e)
{
  int result = e.Result;
  _Proxy.GetMethodCompleted  -= OnGetMethod_Completed
 }
0 голосов
/ 13 июня 2011

Для асинхронных вызовов необходимо избегать последующих вызовов до того, как они произойдут, а не в конце потенциально длительного процесса. В противном случае вы все равно можете с удовольствием запустить несколько событий. Хотя все результаты, кроме первого, будут игнорироваться, вы по-прежнему отправляете данные на сервер и с сервера (лучше избегать).

Вы действительно хотите просто отключить кнопку или другие элементы GUI во время обработки. Это идеальное место для использования BusyIndicator, но обычно достаточно просто связать состояние включения кнопки с состоянием обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...