停止在Dispatcher方法WPF中调用函数

时间:2019-04-17 09:27:05

标签: c# wpf backgroundworker dispatcher dispatch-async

我有一个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方法而发生的。

有什么办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

只需添加一个return语句,如下所示:

void continueProcess()
{

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

这将阻止在该方法中执行任何其他语句。

顺便说一句,Dispatcher.Invoke不是“后台工作者” 。您正在做的就是查询要由UI线程处理的Windows消息泵的方法调用-与您当前正在使用的相同!这也是一次同步通话,因此Dispatcher.Invoke直到continueProcess才会返回。