Вот пример кода, демонстрирующий проблему.Я запускаю BackGroundWorker для функции затрат времени DoSomething
.
Кнопка сначала отключена.Затем рабочий начинает работать.Наконец, кнопка снова активируется после завершения работы.
BackgroundWorker w = new BackgroundWorker();
/* Disable the button at first */
Button.Enabled = false;
w.WorkerReportsProgress = false;
w.WorkerSupportsCancellation = false;
w.DoWork += new DoWorkEventHandler((s, e) =>
{
DoSomething(); // It may take 10 ms to 10 s
});
w.RunWorkerCompleted += new RunWorkerCompletedEventHandler((s, e) =>
{
/* Enable the button finally */
Button.Enabled = true;
});
w.RunWorkerAsync();
Однако функция затрат времени DoSomething
может в некоторых случаях немедленно вернуться.Затем кнопка отключения и включения может вызвать мерцание кнопки.Замечено, что установка Disable
и Enable
заставляет кнопку перекрашиваться.
Четный:
private void AnotherButton_Clicked(object sender, EventArgs e)
{
for (int i = 0; i < 40; i++)
{
Button.Enabled = false;
Button.Enabled = true;
}
}
вызывает мерцание (пожалуйста, нажмите кнопку как можно быстрее).Есть ли лучшее решение, которое может уменьшить проблему мерцания кнопок, вызванную включением и отключением?