3

次のコードを使用してDLLを作成しました。このコードをDLLとしてコンパイルしました。

namespace DllEventTrigger
{
    public class Trigger
    {
        public delegate void AlertEventHandler(Object sender, AlertEventArgs e);

        public Trigger()
        {

        }

        public void isRinging()
        {
            AlertEventArgs alertEventArgs = new AlertEventArgs();
            alertEventArgs.uuiData = "Hello Damn World!!!";
            CallAlert(new object(), alertEventArgs);
        }
        public event AlertEventHandler CallAlert; 
    }

    public class AlertEventArgs : EventArgs
    {
        #region AlertEventArgs Properties
        private string _uui = null;
        #endregion

        #region Get/Set Properties
        public string uuiData
        {
            get { return _uui; }
            set { _uui = value; }
        }
        #endregion
    }
}

今、私はこのコードを使用してフォームアプリケーションでこのdllによってトリガーされたイベントを処理しようとしています。

namespace DLLTriggerReciever
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Trigger trigger = new Trigger();
            trigger.isRinging();
            trigger.CallAlert += new Trigger.AlertEventHandler(trigger_CallAlert);
        }

        void trigger_CallAlert(object sender, AlertEventArgs e)
        {
            label1.Text = e.uuiData;
        }
    }
}

私の問題私はどこが間違っていたのかわかりません。提案してください。

4

2 に答える 2

5

イベントが実際に発生する前にイベントハンドラーを割り当てる必要があります。そうしないと、コードは。をスローしNullReferenceExceptionます。

trigger.CallAlert += new Trigger.AlertEventHandler(trigger_CallAlert);
trigger.isRinging();

さらに、ハンドラーが割り当てられているかどうかを最初に確認することをお勧めします。

var handler = CallAlert; // local variable prevents a race condition to occur

if (handler != null) 
{
  handler(this, alertEventArgs);
}
于 2012-07-18T13:12:41.537 に答える
2

@Geneが言ったように、イベントを発生させる前にイベントを登録する必要があります。とにかく、nullをチェックして、発生しようとしているイベントに誰かが登録されているかどうかを確認することをお勧めします。

このような:

if (this.CallAlert != null)
    this.CallAlert(new object(), alertEventArgs);
于 2012-07-18T13:17:27.913 に答える