我正在尝试创建一个异步C#Windows应用程序,该应用程序检测所选路径上的视频文件,然后从外部电影数据库API加载其元数据。 一切都已完成,但是当我的脱机数据库逐个影片填满影片时,我无法以响应方式将结果加载到UI中。 我在UI中使用WPF,只有一个主窗口,其中包含一些不同用户控件的容器(显示所有电影,显示特定单击的电影以及用于添加新路径的屏幕)。 因此,当用户添加路径时,我的代码将递归搜索所有视频文件,所有对应文件的列表将返回到主窗口,并从该窗口发送到我的API,该API会提取所需的元数据并将其保存到本地脱机MSSQL数据库中。 这是我的代码:
private async void AddFilesToDb(object sender, EventArgs e)
{
List<File> files = (List<File>)sender;
progressBar.Visibility = Visibility.Visible;
double addPercentage = 100.0 / (double)files.Count();
var progress = new Progress<double>(value => progressBar.Value = value);
ProgramRepository progRepo = new ProgramRepository();
await Task.Run(() =>
{
double i = addPercentage;
foreach (File file in files)
{
progRepo.CreateVideoMetadata(file);
((IProgress<double>)progress).Report(i);
i += addPercentage;
}
});
progressBar.Visibility = Visibility.Hidden;
ShowMenu(Model.Menu.Videos);
videosControl.VideosLoader(2);
}
当前,我只是在尝试实现Task.Run()函数完成时,将用户重定向到显示所有添加的视频的菜单(最后两行)。但是videosControl.VideosLoader(2)从脱机数据库中获得了0个文件,当我单击手动加载按钮时:
private void btnMovies_Click(object sender, RoutedEventArgs e)
{
ShowMenu(Model.Menu.Videos);
videosControl.VideosLoader(2);
}
一切似乎都可以正常加载。 所以我的第一个问题是,为什么在等待Task.Run()完成时,第一次尝试加载数据库时该数据库为空。 我的第二个更重要的问题是: 在将一部电影添加到脱机数据库后,如何将其自动添加到UI以供用户查看,并且接下来的每部电影也都添加了,我该如何实现这一点。 预先谢谢你!