gpt4 book ai didi

C#:查询线程的状态

转载 作者:行者123 更新时间:2023-12-03 03:02:09 24 4
gpt4 key购买 nike

我正在运行一个后台工作线程,需要很长时间才能运行。

实际函数存储某个位置的文件夹结构,但我们可以举一个在不同线程中运行的以下伪代码的示例 -

private int currentResult=0;
private void worker() {
for(int n = 0; n<1000; ++n)
{
int result;
// Do some time consuming computation and update the result
currentResult = result;
}
}

它在 BackgroundWorker 线程中运行。我可以安全地从另一个线程读取 currentResult 吗?

编辑:

关键字 volatile 似乎是一个神奇的解决方案(感谢乔恩)!我计划以这种方式将带有消息的 string 从工作类传递到 UI。

您可能想知道为什么我不使用ReportProgress。原因是 BackgroundWorker.DoWork 创建了不同类的对象,并调用其中执行大量工作的方法。这种方法很耗时。该类是一个获取目录结构的类,主要的计算方法依赖于其中的很多相关方法。所以这个类甚至不知道后台 worker 的存在,因此无法向它报告进度。将类的功能移动到BackgroundWorker 似乎很困惑。如果这看起来是一个糟糕的设计,我愿意接受建议!

最佳答案

如果你让它 volatile 你可以......或者如果你总是使用Interlocked类来读取和写入它。 (或者始终在同一监视器上的锁内读取/写入它。)如果没有这些预防措施,您最终可能会读取过时的值。

但是,这不一定是最好的做事方式。一般来说,后台工作人员应该使用 ReportProgress 来指示其进度...在这种情况下,您有什么理由不想这样做吗?

关于C#:查询线程的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197297/

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