c# - 停止在 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 方法而发生的。
有什么想法可以解决这个问题吗?
解决方案
只需添加return
如下语句:
void continueProcess()
{
if(condition == true)
{
dosomework();
}
else
{
openNewForm();
closeForm1();
return; // <----------- add me!
}
someOtherFunctions();
}
这将阻止在该方法中执行任何进一步的语句。
顺便说一句,Dispatcher.Invoke
不是“后台工作者”。您所做的只是排队等待由 UI 线程处理的 Windows 消息泵的方法调用 - 您当前正在使用同一个!这也是一个同步调用,所以Dispatcher.Invoke
不会返回continueProcess
。
推荐阅读
- r - 根据R中另一个的行和列对矩阵进行排序
- javascript - 在纯 JavaScript 中检查连接性的最佳方法是什么?
- python - 使用 Paho Mqtt 客户端在 on_message 中发布不工作
- java - Selenium Java 比较不正确?
- mysql - 如何在 mysql 中使用动态日期组合 2 个查询?
- docker - 从 Docker 容器连接到主机上的 PubSub 模拟器
- python - 从字符串中删除任何撇号 - Python Pandas
- c++ - 为什么-1等于整数-5的第4个字节?
- java - JWT authentication with spring and angular with null header
- c# - WinForms 圆环图和饼图标签背景元素颜色属性