C# 手术结束时取消所有课堂活动的订阅
我有一个包含多个事件的类,我从主类注册并更新我的C# 手术结束时取消所有课堂活动的订阅,c#,.net,events,C#,.net,Events,我有一个包含多个事件的类,我从主类注册并更新我的UI: public class MyClass { public delegate void event1Delegate(); public event event1Delegate event1Handler; public delegate void event2Delegate(); public event event2Delegate event2Handler; public delega
UI
:
public class MyClass
{
public delegate void event1Delegate();
public event event1Delegate event1Handler;
public delegate void event2Delegate();
public event event2Delegate event2Handler;
public delegate void FinishWorkDelegate();
public event FinishWorkDelegate FinishWorkEventHandler;
public void DoWork()
{
// bla bla
if (FinishWorkEventHandler != null)
FinishWorkEventHandler();
}
}
从我的主UI
注册到我的按钮时钟事件中的此事件:
private void radMenuItemSimultaneouslyPlay_Click(object sender, EventArgs e)
{
MyClass obj = new MyClass();
job.event1Handler += job_event1Handler;
job.event2Handler += job_event2Handler;
job.FinishWorkEventHandler += job_FinishWorkEventHandler;
job.doWork();
}
现在,当FinishWorkEventHandler
被激发时,这意味着我的操作完成:
private void job_OnFinishJobThreadEvent()
{
labelStatus.Text= "Finished!";
}
这里我想取消订阅MyClass
事件,所以我想知道是否可以将此事件从FinishWorkDelegate()
更改为FinishWorkDelegate(MyClass obj)
,从这里我可以访问我的对象,在这种情况下,我可以取消订阅我的事件。
这样可以吗
这样可以吗
是啊,为什么不呢?事实上,已经有一个用于此调用的内置委托,您可以使用它来代替创建新委托:
public event EventHandler<EventArgs> FinishWorkEventHandler;
public void DoWork()
{
// bla bla
if (FinishWorkEventHandler != null)
FinishWorkEventHandler(this, EventArgs.Empty);
}
取消订阅FinishWorkEventHandler怎么样?@user3328870
myObject.FinishWorkEventHandler-=OnFinish代码>
private void OnFinish(object sender, EventArgs e)
{
var myObject = sender as MyClass;
if (myObject != null)
{
myObject.event1Handler -= job_event1Handler;
myObject.event2Handler -= job_event2Handler;
}
}