/// <summary>
 /// 例外通知イベントの処理を行います。
 /// </summary>
 /// <param name="sender">イベントを送信したオブジェクトを指定します。</param>
 /// <param name="e">発生した例外を含むイベント引数を指定します。</param>
 private void CommunicatorExceptionHappened(object sender, ExceptionHappenedEventArgs e)
 {
     var d = this.Dispatcher;
     if (!d.CheckAccess())
     {
         d.Invoke(() => this.CommunicatorExceptionHappened(sender, e));
     }
     else
     {
         var communicator = sender as TcpCommunicator;
         if (communicator != null)
         {
             var ex = e.Exception;
             var msg = ex.GetType().ToString() + ":" + ex.Message;
             this.AddLog(msg, LogRecord.WarningLevel.Error, ex.StackTrace);
             if (!communicator.IsConnected)
             {
                 communicator.Dispose();
             }
         }
     }
 }
 /// <summary>
 /// 例外発生イベントを発生させます。このメソッドは派生クラスでオーバーライドできます。
 /// </summary>
 /// <param name="e">発生した例外を含むイベント引数を指定します。</param>
 protected virtual void OnExceptionHappened(ExceptionHappenedEventArgs e)
 {
     if (this.ExceptionHappened != null)
     {
         this.ExceptionHappened(this, e);
     }
 }
 /// <summary>
 /// 例外通知イベントの処理を行います。
 /// </summary>
 /// <param name="sender">イベントを送信したオブジェクトを指定します。</param>
 /// <param name="e">発生した例外を含むイベント引数を指定します。</param>
 private void AcceptorExceptionHappened(object sender, ExceptionHappenedEventArgs e)
 {
     var d = this.Dispatcher;
     if (!d.CheckAccess())
     {
         d.Invoke(() => this.AcceptorExceptionHappened(sender, e));
     }
     else
     {
         var ex = e.Exception;
         var msg = ex.GetType().ToString() + ":" + ex.Message;
         this.AddLog(msg, LogRecord.WarningLevel.Error, ex.StackTrace);
     }
 }