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);
