主窗口加载时的 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();
        }));
    }

主窗口加载时的 WPF 后台工作线程

您使用 this.Dispatcher.Invoke 在主 UI 线程上显式运行工作。这有效地使您的后台工作线程无用,迫使它等到主线程完成"某些操作"。

"一些行动"是这里长期运行的任务。这是您要从后台辅助角色执行的代码,而主线程处理 WinLoading 对话框。