主窗口加载时的 WPF 后台工作线程
本文关键字:后台 工作 线程 WPF 窗口 加载 | 更新日期: 2023-09-27 18:36:01
我有带有主窗口的WPF应用程序。 我希望后台工作者在主窗口加载时打开一个加载窗口(WinLoad),并在加载完成后关闭它。 我在主窗口中有这段代码。 当我运行它时,我会在操作完成后打开 WinLoading 窗口,然后打开主窗口(10 秒后)。
public MainWindow()
{
InitializeComponent();
wLoadingService = new BackgroundWorker();
wLoadingService.DoWork += wLoadingService_DoWork;
wLoadingService.RunWorkerCompleted += wLoadingService_RunWorkerCompleted;
wLoadingService.WorkerReportsProgress = true;
wLoadingService.WorkerSupportsCancellation = true;
wLoadingService.RunWorkerAsync();
//some action (takes 10 seconds).....
}
void wLoadingService_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Dispatcher.Invoke((Action)(() =>
{
WinLoading.EndDisplay();
}));
}
void wLoadingService_DoWork(object sender, DoWorkEventArgs e)
{
this.Dispatcher.Invoke((Action)(() =>
{
WinLoading.Loading("Connecting...");
WinLoading.BeginDisplay();
}));
}
您使用 this.Dispatcher.Invoke
在主 UI 线程上显式运行工作。这有效地使您的后台工作线程无用,迫使它等到主线程完成"某些操作"。
"一些行动"是这里长期运行的任务。这是您要从后台辅助角色执行的代码,而主线程处理 WinLoading 对话框。