读取和设置属性多个线程

时间:2013-08-07 21:02:44

标签: c# multithreading instantiation instance-variables

我的项目有3个类,2个线程。当我访问类的属性时,我会得到正确的值。我读的I类开始第二个线程。从这个新线程我想从第二个类中读取属性。

当我在class1中设置值时,该值为1,但class3中的值为0。

class test
{
    public void main()
    {
        Class2 cl = new Class2;
        thread th = new thread(new threadstart(a.start));
        th.start()

        cl.test=1;
    }
}

class Class2
{
    private int test;
    public int test
    {
        get { return test;}
        set {test = value;}
    }

    public void start()
    {
        Class3 cls = new Class3();
        thread th = new thread(new threadstart(cls.begin));
        th.start();
    }
}

class Class3
{
    public void begin()
    {
        Class2 cl = new Class2();
        MessageBox.show(cl.test.tostring());
    }
}

2 个答案:

答案 0 :(得分:2)

您有两个单独的Class2实例。在Class3中创建的实例不知道您在Class1中创建的实例中的值是什么。

如果您知道只需要处理test属性的单个实例,则可以将其设为静态:

public static int Test { get; set; }

然后使用以下方法引用它:

Class2.Test = 1;

顺便说一下,我不确定这是如何编译的,因为你有一个名为“test”的公共属性来访问Class2中的私有“test”变量。通常,人们将私有变量命名为_test (取决于您的个人偏好),或者只是省略私有变量,如上所述,如果您的属性除了访问私人变量。

答案 1 :(得分:0)

我会使用内置的.NET库来管理线程。 Task Parallelism

按照这里的一些教程。这些对象使得处理线程和等待结果变得更加容易。他们甚至可以为您提供线程安全对象。

线程安全等效项:

Array,List =&gt; ConcurrencyBag<T>

Dictionary<K, T> =&gt; ConcurrentDictionary<K, T>