2013-08-07 2 views
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()); 
    } 
} 
+0

вы имели в виду типа 'cl.start' вместо' 'a.start' в тесте :: main' – JaredPar

ответ

2

У вас есть два отдельных экземпляров Class2. Экземпляр, созданный в Class3, понятия не имеет, какие значения находятся в экземпляре, созданном в Class1.

Если вы знаете, что хотите, только один экземпляр test собственности, чтобы иметь дело с, вы могли бы сделать его статическим:

public static int Test { get; set; } 

А затем ссылаться на него с помощью:

Class2.Test = 1; 

Как и в сторону , Я не уверен, как это компилируется, поскольку у вас есть общедоступное свойство с именем «test» для доступа к частной переменной «test» в Class2. Как правило, люди называют приватную переменную чем-то вроде _test(в зависимости от ваших личных предпочтений), или просто опустить личную переменную вообще, как я сделал выше, если ваша собственность ничего не делает, кроме доступа к частной переменной.

0

Я бы использовал встроенные библиотеки .NET для управления потоками. Task Parallelism

Ознакомьтесь с некоторыми учебными пособиями здесь. Эти объекты значительно облегчают работу с потоками и ждут результатов. У них даже есть потокобезопасный объект, доступный для вас.

поточно-Equivalants:

Array,List =>ConcurrencyBag<T>

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

Смежные вопросы