我有一个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方法而发生的。
有什么办法解决这个问题吗?
答案 0 :(得分:0)
只需添加一个return
语句,如下所示:
void continueProcess()
{
if(condition == true)
{
dosomework();
}
else
{
openNewForm();
closeForm1();
return; // <----------- add me!
}
someOtherFunctions();
}
这将阻止在该方法中执行任何其他语句。
顺便说一句,Dispatcher.Invoke
不是“后台工作者” 。您正在做的就是查询要由UI线程处理的Windows消息泵的方法调用-与您当前正在使用的相同!这也是一次同步通话,因此Dispatcher.Invoke
直到continueProcess
才会返回。