在dll中创建事件并在Form中处理事件 [英] Creating an event in a dll and handling the event in a Form

查看:56
本文介绍了在dll中创建事件并在Form中处理事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码创建了一个DLL.我已将此代码编译为DLL.

I have created a DLL using the following code. I have compiled this code as a 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触发的事件.

Now I'm trying to handle the event triggered by this dll in a forms application with this code.

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

我的问题我不确定哪里出了问题.请提出建议.

My problem i'm not sure where i went wrong. Please suggest.

推荐答案

在实际触发事件之前,您需要先分配事件处理程序 ,否则代码将抛出 NullReferenceException .

You need to assign your event handler before the event is actually fired, otherwise the code will throw a NullReferenceException.

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

此外,建议您首先检查是否分配了处理程序:

Additionally, it's a recommended practice to check first, whether there are handlers assigned:

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

if (handler != null) 
{
  handler(this, alertEventArgs);
}

这篇关于在dll中创建事件并在Form中处理事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆