WPF BackgroundWorker while main window loading

WPF BackgroundWorker while main window loading

我有主要的 WPF 应用程序 window。我希望 BackgroundWorker 在 main window 加载时打开加载 window (WinLoading),并在加载完成时关闭它。我在主 window 中有这段代码。当我运行它时,我会在操作完成后打开 WinLoading window,然后再打开主 window(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 线程上工作。这有效地使您的后台工作人员无用,迫使它等待主线程完成 "some action".

"Some action"就是这里的长运行ning任务。 是您要从后台工作程序执行的代码,而您的主线程处理 WinLoading 对话框。