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

问题描述 投票:0回答:1

我有一个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# wpf backgroundworker dispatcher dispatch-async
1个回答
0
投票

只需添加return语句如下:

void continueProcess()
{

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

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

顺便说一句,Dispatcher.Invoke不是“背景工作者”。您所做的就是将方法调用排队到Windows消息泵以由UI线程处理 - 与您当前使用的相同!这也是一个同步的召唤,所以Dispatcher.Invoke不会回来,直到continueProcess