Проверенный ответ на этот вопрос, представленный vidalsasoon, является неправильным, и это неверно для всех различных способов, заданных этим же вопросом.
Возможно, что любой обработчик событий, содержащий код, требующий значительного времени процесса, может привести к задержке отключения кнопки на вопрос; независимо от того, где вызывающая строка кода вызывается внутри обработчика.
Попробуйте приведенные ниже доказательства, и вы увидите, что функция disable/enable не имеет отношения к регистрации событий. Событие нажатия кнопки по-прежнему регистрируется и все еще обрабатывается.
Доказательство от противного 1
private int _count = 0;
private void btnStart_Click(object sender, EventArgs e)
{
btnStart.Enabled = false;
_count++;
label1.Text = _count.ToString();
while (_count < 10)
{
btnStart_Click(sender, e);
}
btnStart.Enabled = true;
}
Доказательство непротиворечивости от 2
private void form1_load(object sender, EventArgs e)
{
btnTest.Enabled = false;
}
private void btnStart_Click(object sender, EventArgs e)
{
btnTest.Enabled = false;
btnTest_click(sender, e);
btnTest_click(sender, e);
btnTest_click(sender, e);
btnTest.Enabled = true;
}
private int _count = 0;
private void btnTest_click(object sender, EventArgs e)
{
_count++;
label1.Text = _count.ToString();
}
Нет похожего на то, чтобы настроить/переопределить внутреннюю обработку WPF события click? –