1
我正在使用MvvmLight並使用MessengerInstance.Send(...)方法在一些ViewModel之間實現了通信。它很棒!最近,儘管我已經從使用同步方法轉移到異步方法來檢索數據,並且它看起來像是破壞了消息傳遞(可能是因爲它在不同的線程上執行)。例如:MvvmLight,Messenger和異步方法調用
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);
}
我在想MessengerInstance.Send()沒有在同一個線程中運行,因爲'DoSomething'(類方法,而不是WCF)在單獨的線程上運行。這讓我覺得這就是爲什麼我的單元測試沒有看到消息彈出。我不知道情況是否如此,但按照您的建議(不使用延續)完美地工作!謝謝! – Killnine
'async void'?這不應該是「異步任務」嗎? –
@PanagiotisKanavos通常,它在大多數命令實現中必須是無效的方法。我有一個和'async Task'一起工作的,但是大多數需要'async void'(*不幸)' –