我想在WPF中显示加载gif,同时我在数据库中获取数据并查询这些数据。 我有一个带有2个用户控件和我的图像/加载gif的MainWindow。
我想我必须使用BackgroundWork,但我无法使其工作。
谢谢。
答案 0 :(得分:1)
假设以下XAML,其中一个隐藏public IQueryable<Author> GetAuthors()
{
return db.Authors;
}
和一个Image
假装加载数据:
Button
在按钮的<StackPanel Margin="20">
<Image
x:Name="loadingGif"
Height="30"
Source="Assets/Square.bmp"
Visibility="Hidden"
VerticalAlignment="Top"
HorizontalAlignment="Left" />
<Button
Content="Load"
VerticalAlignment="Top"
Click="OnGoClick" />
</StackPanel>
事件处理程序中,您可以看到Click
并启动Image
。完成BackgroundWorker
后,再次隐藏BackgroundWorker
:
Image
(您需要注意 where 更改private void OnGoClick(object sender, RoutedEventArgs e)
{
loadingGif.Visibility = Visibility.Visible;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += OnDoWork;
worker.RunWorkerCompleted += OnRunWorkerCompleted;
worker.RunWorkerAsync();
}
private void OnDoWork(object o, DoWorkEventArgs args)
{
Task.Delay(2000).Wait(); // Pretend to work
}
private void OnRunWorkerCompleted(object o, RunWorkerCompletedEventArgs args)
{
loadingGif.Visibility = Visibility.Hidden;
}
属性;这需要在UI线程上进行。)
答案 1 :(得分:0)
您可以将任务用于长时间运行功能(加载数据)
LoadGif();
await Task.Run(() => LoadYourData());