Für verschiedene Szenarien, in denen ich den MVVMlight Messenger nutze, habe ich mir eine kleine Helferklasse geschrieben.
Diese erlaubt je nach Situation Nachrichten asynchron zu verschicken, wahlweise mit GUI-Zugriff oder auch ohne. Vor der Nutzung des Dispatchers
muss dieser einmal initialisiert werden, z.B. beim Start der Anwendung in der App.xml.cs:
DispatcherHelper.Initialize();
Der Code
/// <summary> /// Helper class for the MVVM light messenger /// </summary> public class MessengerHelper { /// <summary> /// Send an async message with UI invocation /// </summary> /// <param name="msg"></param> public static async void SendMessageInvokeUiAsync<T>(T msg) { await Task.Factory.StartNew(() => { DispatcherHelper.CheckBeginInvokeOnUI(() => { Messenger.Default.Send(msg); }); }); } /// <summary> /// Send an message async /// </summary> /// <param name="msg"></param> public static async void SendMessageAsync<T>(T msg) { await Task.Factory.StartNew(() => { DispatcherHelper.CheckBeginInvokeOnUI(() => { Messenger.Default.Send(msg); }); }); } /// <summary> /// Send an synchronous message /// </summary> /// <param name="msg"></param> public static void SendMessage<T>(T msg) { Messenger.Default.Send(msg); } }
Anschließend kann die Klasse leicht verwendet werden.
MessengerHelper.SendMessageInvokeUiAsync(msg);