我的项目有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());
}
}
答案 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>