首页 > 解决方案 > 停止在 Dispatcher 方法 WPF 中调用函数

问题描述

我有一个 WPF 项目。在 Form1 中,当单击一个按钮时,我在后台工作人员中调用 continueProcess() 方法。

    private void BgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        this.Dispatcher.Invoke(() =>
        {
            continueProcess();
        });
    }

在 continueProcess() 方法中,我想打开另一个表单并关闭 Form1。

if(condition == true)
{
dosomework();
}
else
{
openNewForm();
closeForm1();
}
someOtherFunctions();

但是在打开新表单后的 else 语句中,仍然再次来到 someOtherFunctions() 。

关闭之后,我不想在 Form1 中执行任何方法。我知道这是因为 BackGroundWorker 或 Dispatcher.Invoke 方法而发生的。

有什么想法可以解决这个问题吗?

标签: c#wpfbackgroundworkerdispatcherdispatch-async

解决方案


只需添加return如下语句:

void continueProcess()
{

    if(condition == true)
    {
        dosomework();
    }
    else
    {
        openNewForm();
        closeForm1();
        return; // <----------- add me!
    }
    someOtherFunctions();
}

这将阻止在该方法中执行任何进一步的语句。

顺便说一句,Dispatcher.Invoke不是“后台工作者”。您所做的只是排队等待由 UI 线程处理的 Windows 消息泵的方法调用 - 您当前正在使用同一个!这也是一个同步调用,所以Dispatcher.Invoke不会返回continueProcess


推荐阅读