Кнопка Включить после отключения вызывает мерцание - PullRequest
0 голосов
/ 05 июля 2019

Вот пример кода, демонстрирующий проблему.Я запускаю 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;
    }
}

вызывает мерцание (пожалуйста, нажмите кнопку как можно быстрее).Есть ли лучшее решение, которое может уменьшить проблему мерцания кнопок, вызванную включением и отключением?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...