Я попытался передать объект ViewModel как asyncState, чтобы обратный вызов мог получить доступ к этому объекту. Обратный вызов обычно обновляет некоторое свойство значением, полученным от вызова асинхронной функции. В любом случае ViewModel будет там, где я хочу обновить статус. Это правильный способ справиться с этим? Или я всегда должен использовать Dispatcher.Invoke?
ViewModel:
public class MyViewModel : BaseViewModel
{
public int Result
{
get { return _result; }
set
{
_result = value;
this.RaisePropertyChanged("Result");
}
}
}
Вызов функции:
caller.BeginInvoke(num1, num2, new AsyncCallback(CallbackMethod), _myViewModel);
Обратный вызов обновляет модель представления:
private void CallbackMethod(IAsyncResult ar)
{
var result = (AsyncResult)ar;
var caller = (AsyncMethodCaller)result.AsyncDelegate;
var vm = ar.AsyncState as MyViewModel;
int returnValue = caller.EndInvoke(ar);
vm.Result = returnValue;
}