c# – 从任务中更新int变量?

我目前有一个函数,它将根据数据量创建函数的X任务,我想更新一个int变量,每个线程执行多少数据来显示progressBar.

目前我的所有UI都是从计时器更新的,所以不是从线程委托更新UI(我认为在这种情况下会更麻烦)我会更新一个变量,计数稍后会被计时器选中并更新UI.

我想知道的是,锁定是更新变量的好方法还是有更好的方法?

计时器是否能够在非常频繁地使用它时读取该变量,或者即使在更新时它仍然能够读取它?

这是一个大致的例子:

private static readonly object counterLock = new object();
int myCounter = 0;

private void FunctionExecutedByAllRunnningThreads()
{
    int executed = 0;
    foreach (some data)
    {
        //do something with this data
        executed++;
    }
    lock (counterLock)
        myCounter += executed;
}
最佳答案

What I would like to know is, would a lock be a good way to update the variable or is there a better way?

如果您只是递增值,则可以使用Interlocked.Increment在没有锁定的情况下安全地递增它.

如果要批量处理,Interlocked.Add将允许您一次性将您的线程局部总值添加到计数器,同样没有锁定.

转载注明原文:c# – 从任务中更新int变量? - 代码日志