C#:查询线程的状态

Kal*_*lEl 2 c# multithreading

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

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:

关键字volatile似乎是一个神奇的解决方案(感谢Jon)!我打算以string这种方式从工人类传递给消息.

你可能想知道为什么我不使用ReportProgress.原因是BackgroundWorker.DoWork创建了一个不同类的对象,并调用一个方法来完成大部分工作.这种方法很耗时.该类是一个获取目录结构的类,以及主计算方法所依赖的许多相关方法.因此,这个班级甚至不知道后台工作人员的存在,因此无法向其报告进度.移动类的功能BackgroundWorker似乎很乱.如果这是一个糟糕的设计,我愿意接受建议!

Jon*_*eet 6

如果你做到了,volatile你可以......或者如果你总是使用这个Interlocked类来读写它.(或者总是在同一台显示器上的锁中读/写它.)如果没有这些预防措施,您最终可能会读取过时的值.

但是,这不一定是做事的最佳方式.通常,后台工作者应该使用它ReportProgress来表明它的进展......在这种情况下你有什么理由不想这样做吗?