线程安全快速整数

时间:2018-01-23 17:40:50

标签: c# multithreading thread-safety

所以我有class持有3个计数器:

    public class Files
    {
        private static ObservableCollection<Files> _files = new ObservableCollection<Files>();
        private static int _inProcess;
        private static int _finished;
        private static int _inQueue;

        public static ObservableCollection<Files> List
        {
            get { return _files ; }
            set { _files = value; }
        }

        public static int InProcess
        {
            get { return _inProcess; }
            set
            {
                _inProcess = value;
            }
        }

        public static int Finished
        {
            get { return _finished; }
            set
            {
                _finished = value;
            }
        }

        public static int InQueue
        {
            get { return _inQueue; }
            set
            {
                _inQueue = value;
            }
        }
}

从另一个班级我想为这些领域增加价值:

Interlocked.Increment(ref Files.InProcess);

但得到了这个错误:

  

属性或索引器不能作为out或ref参数传递。

这很好用:

Files.InProcess++;

我该如何解决?

1 个答案:

答案 0 :(得分:2)

错误非常简单。您不能将属性作为ref传递。在这种情况下,最好的选择是创建方法

public static void IncrementInProcess() { Interlocked.Increment(ref _inProcess); }