2011-10-26 7 views
0

助けてください。私はクロスビューの通信にメッセンジャークラスを使用しようとしています。特に、すべてのエラー(例外)をメインビューここで私はエラーといくつかの提案と何がすべきか素晴らしいUIをポップアップすることができます。列挙されたトークンでメッセンジャーを使用すると、正常に動作しないようです。

私はすべてのアプリケーションのメッセージタイプを列挙した共有プロジェクトに静的クラスを持っています。私が使用する送信..

AppMesssages.RaiseErrorMessage.Register(this,OnRaiseErrorMessage); 

例えば、同じ共有プロジェクト内の静的クラスの静的メソッドを呼び出す登録する

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

(以下の例では1まで減少)私は同じ値にこれらのトークンを変更しない限り...

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

@ 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); 
関連する問題