我有一个Backgroundworker,我想显示一个加载gif,直到工人完成。
我的问题是我无法使用
while(worker.IsBusy)
Thread.Sleep(50);
因为它会阻止UI线程和我的GIF更新它的帧。
使用 AutoResetEvent 和myAutoResetEvent.WaitOne();
您是否知道如何等待Backgroundworker完成并仍能显示GIF?
答案 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
完成后重新启用它们。