我想使用全局声明的委托订阅和取消订阅ToolStripButton
的Click
事件,如本SO问题和后续答案所述。我有以下代表在我的班级中全局声明
private delegate void StopTask(ref MainForm _mainForm,
Task _task, CancellationTokenSource _cancelSource);
然后我设置这个委托持有如下的方法
StopTask cancelTask = UtilsTPL.CancelRunningProcess;
其中,在公共类UtilsTPL
中,CancelRunningProcess
被定义为
public static void CancelRunningProcess(ref MainForm _mainForm, Task _task,
CancellationTokenSource _cancelSource)
{
// Some really amazing code...
}
然后,我尝试将代理添加到我的ToolStripButton
点击事件中,如下所示(并取消订阅)
mainForm.stopButton.Click += cancelTask;
mainForm.stopButton.Click -= cancelTask;
这显然是行不通的,因为有一个明显的类型错过比赛。
如何订阅/取消订阅按钮点击事件的一致委托cancelTask
?谢谢你抽出时间。
注意:我这样做是为了可以重复使用该按钮来取消许多不同的Task
s。
与其订阅和取消订阅点击事件,不如从点击事件调用cancelTask
private void stopButton_Click(object sender, EventArgs e)
{
var handler = cancelTask;
if (handler != null) {
handler(this, _task, _cancelSource);
}
}
以及订阅和取消订阅cancelTask
cancelTask += Whatever;
cancelTask -= Whatever;
我会对您想要实现的目标更加好奇。也许有一种方法可以在不使用全局多播委派的情况下完成任务。