Прекратить вызывать функции в методе Dispatcher WPF - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть проект 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();

Но здесь, в другом операторе после открытия новой формы, все еще снова приходит к someOtherFunctions ().

Я не хочу выполнять какой-либо метод в Form1 после его закрытия. Я знаю, что это происходит из-за метода BackGroundWorker или Dispatcher.Invoke.

Есть идеи, чтобы решить эту проблему?

1 Ответ

0 голосов
/ 17 апреля 2019

Просто добавьте оператор return, как показано ниже:

void continueProcess()
{

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

Это предотвратит выполнение любых дальнейших операторов в методе.

Кстати, Dispatcher.Invoke не является "фоновый работник" .Все, что вы делаете - это помещаете вызов метода в Windows Message Pump для обработки потоком пользовательского интерфейса - того же, который вы использовали в настоящее время!Это также синхронный вызов, поэтому Dispatcher.Invoke не вернется, пока continueProcess не вернется.

...