1
MvvmLight를 사용 중이며 MessengerInstance.Send (...) 메서드를 사용하여 일부 ViewModel간에 통신을 구현했습니다. 그것은 위대한 작품!MvvmLight, Messenger 및 Async 메서드 호출
최근에 동기 메서드를 사용하여 데이터를 검색하는 비동기 메서드로 이동했으며 메시징을 중단하는 것처럼 보입니다 (아마도 다른 스레드에서 실행되기 때문일 수 있습니다). 예를 들어 :
이public ICommand SomeCommand { get { return new RelayCommand(DoSomething); } }
private async void DoSomething(object obj)
{
//Used to be SomeWcfService.DoSomething(); with some logic afterward
await SomeWcfService.DoSomethingAsync().ContinueWith(task => { //Some logic after method completes });
MessengerInstance.Send(SomeDataToSend, MessageIdentifer.DoSomething);
}
DoSomething (클래스 메서드, WCF가 아닌)이 별도의 스레드에서 실행 중이므로 MessengerInstance.Send()가 동일한 스레드에서 실행되고 있지 않다고 생각했습니다. 이것은 내 단위 테스트에서 메시지 팝업이 보이지 않는 이유라고 생각하게 만들었습니다. 나는 그것이 사실인지 모르지만, 당신이 제안한 것을 수행하면 (연속을 사용하지 않음) 완벽하게 작동합니다! 감사! – Killnine
'async void'? 이것은 '비동기 작업'이 아니어야합니까? –
@PanagiotisKanavos 일반적으로 대부분의 명령 구현에서 사용할 수있는 방법은 void 여야합니다. 나는'async Task'와 함께 작동하지만, 대부분은 async void (* 불행히도)'' –