将项目加载到脱机MSSQL数据库时将其添加到WPF UI

时间:2019-06-01 16:25:23

标签: c# asp.net wpf entity-framework

我正在尝试创建一个异步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以供用户查看,并且接下来的每部电影也都添加了,我该如何实现这一点。 预先谢谢你!

0 个答案:

没有答案