请帮助..我正在尝试使用messenger类进行跨视图通信,特别是我想将所有错误(例外)路由到主视图,在那里我可以弹出一个带有错误的优秀用户界面和一些建议怎么做。
我在共享项目中有一个静态类,我的所有应用程序消息类型都是枚举。 (在下面的例子中减少到一个)
public static class AppMessages
{
enum MessageTypes
{
RaiseError
}
public static class RaiseErrorMessage
{
public static void Send(Exception ex)
{
Messenger.Default.Send(ex, MessageTypes.RaiseError);
}
public static void Register(object recipient, Action<Exception> action)
{
Messenger.Default.Register(recipient, MessageTypes.RaiseError, action);
}
}
}
要注册我在同一个共享项目中的静态类上调用静态方法,例如..
AppMesssages.RaiseErrorMessage.Register(this,OnRaiseErrorMessage);
发送我使用...
AppMessages.RaiseErrorMessage.Send(e);
现在我遇到的问题是,除非我将这些令牌更改为相同的值,说“1”我没有收到消息,但是我无法看到我的生活为什么使用枚举不工作?
所以要明确的是,如果我使用的话,我只收到消息......
public static class RaiseErrorMessage
{
public static void Send(Exception ex)
{
Messenger.Default.Send(ex, 1);
}
public static void Register(object recipient, Action<Exception> action)
{
Messenger.Default.Register(recipient, 1, action);
}
}
我只是一直盯着代码,现在我已经大脑冻结,告诉我我做错了什么。非常感谢您的回复。
答案 0 :(得分:0)
@ user1014297,我使用Enum实现了一个类似的解决方案,它的工作原理。它可能是一个线程问题和/或用于注册接收器的实例超出了范围。
我的解决方案使用MEF和MVVM Light,我将各种MEF模块的异常发送到MEF启动应用程序。使用单个UI显示所有异常。为简化说明,我简化了以下代码
注册:
public static bool _handleErrorUIRegistered;
private static void _registerExceptionHandlerUI(object instance)
{
if (_handleErrorUIRegistered) return;
_handleErrorUIRegistered = true;
Messenger.Default.Register<Exception>(
instance,
Sym.SL.Shared.Enums.Dialogs.Error,
ex =>
{
// Do something
GalaSoft.MvvmLight.Threading.DispatcherHelper.UIDispatcher.BeginInvoke(() =>
{
MessageBox.Show("Showing the error: + \r\n\r\n" + ex.Message);
});
});
}
发送消息:
Messenger.Default.Send<Exception>(new Exception("Test Error"), Sym.SL.Shared.Enums.Dialogs.Error);