0

我的项目有 3 个类和 2 个线程。当我访问创建线程的类的属性时,我得到了正确的值。我正在阅读的课程开始第二个线程。从这个新线程中,我想从第二类中读取属性。

当我在 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());
    }
}
4

2 回答 2

2

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

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

public static int Test { get; set; }

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

Class2.Test = 1;

顺便说一句,我不确定它是如何编译的,因为你有一个名为“test”的公共属性来访问Class2. 通常,人们将私有变量命名为_test (取决于您的个人偏好),或者如果您的财产除了访问私有变量之外什么都不做,那么就像我上面所做的那样完全省略私有变量。

于 2013-08-07T21:05:46.743 回答
0

我会使用内置的 .NET 库来管理线程。任务并行

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

线程安全等价物:

Array,List=>ConcurrencyBag<T>

Dictionary<K, T>=>ConcurrentDictionary<K, T>

于 2013-08-07T21:07:44.253 回答