-
null Delegate/event
All,
Can you help? I am kinda new to C#, a long-time VB guy.
I have nearly identical code in another project, but this code (kinda copied-pasted) is not working.
The event "MyDataChanged" is always null when I try to call it. Cannot figure out why?
Thanks!
Dave
Code:
namespace OPC_Process_Driver
{
public partial class frmMain : Form
{
private OPC_Process.cls_OPC_Group m_OPC_Process;
// dhs - added delegate for VB Event consumption
public delegate void theDataChanged(object source, string strContext, string strTagName, string strTagValue);
public event theDataChanged MyDataChanged;
public void NotifyDataChanged(string strContext, string strTagName, string strTagValue)
{
if (MyDataChanged != null)
{
MyDataChanged(this, strContext, strTagName, strTagValue);
// THIS IS ALWAYS NULL!!! }
}
public frmMain()
{
InitializeComponent();
m_OPC_Process = new cls_OPC_Group();
m_OPC_Process.DataChanged += new __cls_OPC_Group_DataChangedEventHandler(this.HandleDataChanged);
}
private void HandleDataChanged(ref string Context, ref string TagName, ref string TagValue)
{
// Handle the event
this.NotifyDataChanged(Context, TagName, TagValue);
}
private void btn_TestDataChanged_Click(object sender, EventArgs e)
{
NotifyDataChanged("Context", "TagName", "TagValue");
}
private void btn_InitOPC_Click(object sender, EventArgs e)
{
string server, context, refresh;
server = "SWToolbox.TOPServer";
context = "Channel_1";
refresh = "100";
m_OPC_Process.Initialize_OPC(ref server, ref context, ref refresh);
}
private void btn_AddItem_Click(object sender, EventArgs e)
{
string context, tagname;
context = "Channel_1";
tagname = "Device_1.HeartBeat";
m_OPC_Process.AddListener(ref context, ref tagname);
}
}
}
I'm trying to do something like this but it won't compile:
Code:
public frmMain()
{
InitializeComponent();
m_OPC_Process = new cls_OPC_Group();
m_OPC_Process.DataChanged += new __cls_OPC_Group_DataChangedEventHandler(this.HandleDataChanged);
this.MyDataChanged += new System.EventHandler(MyDataChanged);
}
-
Re: null Delegate/event
OK I was able to get past this using this code:
Code:
public frmMain()
{
InitializeComponent();
m_OPC_Process = new cls_OPC_Group();
m_OPC_Process.DataChanged += new __cls_OPC_Group_DataChangedEventHandler(this.HandleDataChanged);
this.MyDataChanged += new theDataChanged(frmMain_MyDataChanged);
}
private void frmMain_MyDataChanged(object source, string strContext, string strTagName, string strTagValue)
{
this.Text = strTagValue;
}