gpt4 book ai didi

c# - 使用 parallel.Invoke 运行后台工作后更新 UI

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:20 25 4
gpt4 key购买 nike

我正在使用 Parallel.Invoke 运行繁重的后台工作,在所有处理完成后我返回该方法,再次返回,调用下一个方法以利用计算的数据我得到错误:跨线程操作无效:从创建它的线程以外的线程访问控件“”。

但我已经从 Parallel.Invoke 创建的线程返回到最初调用它的线程。控制不返回到它开始的线程是否正常?我如何确保这确实会发生?

代码:

public void TopMethod()
{
Calculate(4);
UpdateGui();
}

public void Calculate(int depth)
{
Recursive(depth);
}

public void Recursive(int depth)
{
if (depth > 0)
System.Threading.Tasks.Parallel.Invoke(
delegate { Recursive(depth - 1); });
}

public void UpdateGui()
{
CalculateOhter(); // Works fine.
controlElement.Focus(); // Causes exception
}

编辑:我知道 Control.Invoke但这将是一个丑陋的解决方案(不想在每个控件中都存储一个委托(delegate))并且程序需要等待所有计算完成才能继续。因此,如果我能以某种方式强制控制返回到我最初开始使用的线程,那就更好了。

最佳答案

您需要从创建控件的线程访问控件/窗口。使用 Control.InvokeControl.InvokeRequired .

关于c# - 使用 parallel.Invoke 运行后台工作后更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com