В программе winforms C # у меня есть событие, которое срабатывает, когда кто-то пытается переименовать проект. В EventArgs для этого события у меня есть свойство «Отмена», которое слушатели события могут установить в true, чтобы (в идеале) отменить переименование (например, если имя уже используется):
ProjectRenamedEventArgs args = new ProjectRenamedEventArgs(oldName, newName);
if (NameChanged != null)
NameChanged(this, args);
if (args.Cancel)
{
// Cancel
}
else
{
// Continue
}
Проблема в том, что строка if (args.Cancel ....) никогда не достигается. Я предполагаю, что выполнение продолжается сразу после события, и, следовательно, args.Cancel всегда ложно, поэтому переименование всегда происходит. Как сделать остановку выполнения до тех пор, пока все слушатели событий не завершат свою работу (давая args.Cancel шанс установить значение true).
Я предполагаю, что это возможно, потому что многие из оконных форм EventArgs имеют свойство Cancel, которое позволяет отменять то, что только что произошло (например, изменение метки на TreeNode TreeView).