Reputation: 1678
In the below code when the program executes the WorkPerformed
is always null
if (WorkPerformed != null)
{
WorkPerformed(hours, wt);
}
Can anyone help me where I am doing something wrong as I am learning Delegates and Events
namespace DelegateDemoApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DoSomethingElse();
}
public void DoSomethingElse()
{
DelegateTest dt = new DelegateTest();
dt.DoWork(10, WorkType.Permanent);
}
}
}
namespace DelegateDemoApp
{
public delegate void WorkPerformedHandler(int hours, WorkType workType);
public enum WorkType
{
Permanent = 1,
Contract = 2
}
public class DelegateTest
{
public event WorkPerformedHandler WorkPerformed;
public event EventHandler WorkCompletedEvent;
public void DoWork(int hours, WorkType wt)
{
for (int i = 0; i < hours; i++)
{
//raise Progress Event
OnWorkPerformedProgress(hours , wt);
}
}
protected virtual void OnWorkPerformedProgress(int hours, WorkType wt)
{
if (WorkPerformed != null)
{
WorkPerformed(hours, wt);
}
}
public DelegateTest()
{
}
public void Supervisor_WorkPerformed(int shiftHours, WorkType WType)
{
string.Format(" WorkHours {0} WorkType {1} ", shiftHours, WType);
}
public string Manager_WorkPerformed(int workHours, WorkType WType)
{
return string.Format (" WorkHours {0} WorkType {1} ", workHours, WType);
}
}
}
Upvotes: 1
Views: 1151
Reputation: 1251
Something has to subscribe to the event in order for it to become non-null:
delegateTestInstance.WorkPerformed += new WorkPerformedHandler(OnWorkPerformed);
...
void OnWorkPerformed(...)
{
....
}
And always remember to unsubscribe from the event when you don't want to handle any more, to ensure resources are cleared up:
delegateTestInstance.WorkPerformed -= OnWorkPerformed;
Upvotes: 3