“阻止”UI线程直到Backgroundworker完成

时间:2016-03-25 22:18:24

标签: c# multithreading backgroundworker gif

我有一个Backgroundworker,我想显示一个加载gif,直到工人完成。

我的问题是我无法使用

while(worker.IsBusy)
    Thread.Sleep(50);

因为它会阻止UI线程和我的GIF更新它的帧。

使用 AutoResetEvent myAutoResetEvent.WaitOne();

时会出现同样的问题

您是否知道如何等待Backgroundworker完成并仍能显示GIF?

1 个答案:

答案 0 :(得分:1)

BackgroundWorker的重点是允许UI继续运行。

并且,您特别希望GIF在BackgroundWorker正在运行时继续更新。

所以这是一个完美的解决方案。

显然,你希望用户界面是非迭代式的。而BackgroundWorker正在运行。嗯,这是一个相当基本的方法。

这是:

    private void SaveButton_Click(object sender, EventArgs e)
    {
        SaveButton.Enabled = false;
        backgroundWorker1.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        System.Threading.Thread.Sleep(5000);
    }

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        SaveButton.Enabled = true;
    }

基本上,您只需禁用您不希望用户与之互动的控件,并在BackgroundWorker完成后重新启用它们。