Я хочу подписаться и отписаться от события 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
с.