0

イベントの発生に問題があります。これが私の基本クラスです:

public abstract class MyClass<T>
{
  public event EventHandler<MessageReceivedEventArgs<T>> MessageReceived;

  protected void OnMessageReceived(MyClass<T> sender, MessageReceivedEventArgs<T> e)
  {
    EventHandler<MessageReceivedEventArgs<T>> handler = MessageReceived;

    if (MessageReceived != null)
      MessageReceived(sender, e);
  }
}

そして私の実装:

public class MyDerivedClass: MyClass<string>
{
  void AFunction()
  {
    // Do some stuff
    OnMessageReceived(this, new MessageReceivedEventArgs<string>("data"));
  }

が呼び出されると、システムは("Value cannot be null. Parameter name: type") をOnMessageReceivedスローします。System.ArgumentNullException私はすでにこのスレッドを読んでおり、これもこのコードを作成するのに役立ちます。しかし、これらの例外の理由を見つけることができません (デバッガーでチェックされ、null ではありません) sendere

私は何を間違っていますか?

編集:これが私のMessageReceivedEventArgs実装です:

public class MessageReceivedEventArgs<T> : EventArgs
{
  public T Data { get; private set; }

  public MessageReceivedEventArgs(T data)
  {
    Data = data;
  }
}
4

1 に答える 1

3

コードによって例外がスローされますか? イベント サブスクライバーのいずれかが例外をスローする可能性があります。

イベント処理は順次操作です。したがって、最初のサブスクライバーが未処理の例外をスローすると、イベント処理は失敗します。

編集:スタックトレースを見ましたか。また、「例外」ウィンドウを介してすべての ArgumentNullException で ide を停止させようとすることもできます。

于 2012-10-26T10:47:54.753 に答える