禁用后导致闪烁的按钮启用

时间:2019-07-05 12:29:25

标签: c# winforms button

这是一段示例代码来演示该问题。我为时间成本函数DoSomething启动了BackGroundWorker。

首先禁用按钮。然后,工人开始工作。最后,工作完成后,将重新启用该按钮。

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可能会立即返回。然后,禁用和启用按钮可能会导致按钮闪烁。可以看到,设置DisableEnable会强制重绘Button。

甚至:

private void AnotherButton_Clicked(object sender, EventArgs e)
{
    for (int i = 0; i < 40; i++)
    {
        Button.Enabled = false;
        Button.Enabled = true;
    }
}

引起闪烁(请尽快按下按钮)。是否有更好的解决方案可以减少由启用和禁用引起的按钮闪烁问题?

0 个答案:

没有答案