开发者

C#: Query status of a thread

I am running a background worker thread that takes a long time to run.

The actual function stores the folder structure of a location, but we can take an example of the following pseudo code running in a different thread -

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;
    }
}

This is running in a BackgroundWorker thread. Can I read the currentResult from another thread safely?

Edit:

Keyword volatile seems like a magic solution (thanks Jon)! I am planning to pass a string with a message in this way from the worker class to the UI.

You might be wondering why I don't use ReportPro开发者_如何学Cgress. The reason is that the BackgroundWorker.DoWork creates an object of a different class, and calls a method there which does bulk of the work. This method is time consuming. The class is one to get the directory structure, and many related methods in it which the main computing method depends on. So this class does not even know existance of the background worker, and hence cannot report progress to it. Moving functionality of the class to BackgroundWorker seems messy. If this strikes as a bad design I am open to suggestions!


If you make it volatile you can... or if you always use the Interlocked class to both read and write it. (Or always read/write it within a lock on the same monitor.) Without these precautions, you could end up reading a stale value.

However, that's not necessarily the best way to do things. Generally, a background worker should use ReportProgress to indicate its progress... is there any reason you don't want to do that in this case?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜