请帮助我了解WPF的UI线程

请帮助我了解WPF的UI线程,wpf,multithreading,user-interface,Wpf,Multithreading,User Interface,我正在写一个关于WPF的项目。 在显示主窗口之前,我必须从数据库中查询一些数据,然后根据 对于数据,我将通过代码隐藏在主窗口上绘制一些用户控件。 处理过程大约需要3-5秒。因此,当第一次启动mainwindows时,它将显示为白色屏幕。3-5秒后,窗口将完全显示 我想问的是,是否还有其他线程可以显示等待视图和进行绘图用户控制。完成后,然后完全加载主窗口 请帮帮我。提前感谢:)。您需要卸载UI线程。您可以使用TPL或BackgroundWorker来完成这项工作。我建议您将TPL与async aw

我正在写一个关于WPF的项目。 在显示主窗口之前,我必须从数据库中查询一些数据,然后根据 对于数据,我将通过代码隐藏在主窗口上绘制一些用户控件。 处理过程大约需要3-5秒。因此,当第一次启动mainwindows时,它将显示为白色屏幕。3-5秒后,窗口将完全显示

我想问的是,是否还有其他线程可以显示等待视图和进行绘图用户控制。完成后,然后完全加载主窗口


请帮帮我。提前感谢:)。

您需要卸载UI线程。您可以使用
TPL
BackgroundWorker
来完成这项工作。我建议您将
TPL
async await
一起使用,因为它更简单,代码也更清晰

private QueryResult QueryDatabase()
{
    // Here's your db access code
    return result;
}

private Task<QueryResult> QueryDatabaseAsync()
{
    // This code will be queued to ThreadPool
    return Task.Run(QueryDatabase);
}

private async void LoadedHandler(...)
{
    IsProgressVisible = true;

    Items = await QueryDatabaseAsync();

    IsProgressVisible = false;
}
private QueryResult QueryDatabase()
{
//这是您的数据库访问代码
返回结果;
}
专用任务QueryDatabaseAsync()
{
//此代码将排入线程池队列
返回Task.Run(QueryDatabase);
}
私有异步void LoadedHandler(…)
{
IsProgressVisible=true;
Items=wait QueryDatabaseAsync();
IsProgressVisible=false;
}

BackgoundWorker或优先级绑定或飞溅。