아래 코드에서 프로그램이 실행될 때 WorkPerformed
항상 null입니다.
if (WorkPerformed != null)
{
WorkPerformed(hours, wt);
}
내가 대표단 및 이벤트를 배우면서 내가 잘못하고있는 곳에서 누구든지 나를 도울 수 있습니까?
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);
}
}
}
null이 아니려면 이벤트를 구독해야합니다.
delegateTestInstance.WorkPerformed += new WorkPerformedHandler(OnWorkPerformed);
...
void OnWorkPerformed(...)
{
....
}
더 이상 처리하지 않으려면 항상 이벤트 구독을 취소하여 리소스를 정리해야합니다.
delegateTestInstance.WorkPerformed -= OnWorkPerformed;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다