Поток T1 обновляет значение, а поток T2 добавляет значение, теперь моя проблема заключается в том, что добавление на один шаг позади - PullRequest
0 голосов
/ 17 сентября 2018

texbox1 изначально равен 0, после того как текстовое поле2 обновлено, скажем, 2, тогда текстовое поле 3 должно показывать добавление текстового поля1 и текстового поля2

на выходе должно быть

textbox1 3
textbox2 1 + 2 + 3

textbox3 6

фактический вывод

textbox1 3
textbox2 1 + 2 + 3

textbox3 3

вот мой код

AutoResetEvent event1 = new AutoResetEvent(false);
    AutoResetEvent event2 = new AutoResetEvent(true);

    Thread t1, t2;
    System.Random rand = new Random();

t1 = new Thread(insert);
        t1.Start();

        t2 = new Thread(OnValueAvailable);
        t2.Start();


public void insert()
    {
       while(true) {
            event1.WaitOne();
            int randomNumber = rand.Next(1, 9);
            SetTextbox1(stack1.getsum().ToString());
            SetTextbox2(randomNumber.ToString());
            stack1.push(randomNumber);
            Thread.Sleep(rand.Next(1000,5000));
          event2.Set();

        }    
    } 

public void OnValueAvailable()
    {
        while (true)
        {

         event2.WaitOne();
            stack1.doSum();
            SetTextbox3(stack1.getsum().ToString());
            event1.Set();

        }
    }

после попытки предположения мринала я изменил

 AutoResetEvent event1 = new AutoResetEvent(true);
    AutoResetEvent event2 = new AutoResetEvent(false);

и оставил весь другой код таким же, но нетУспех также попробовал второе предложение к

 AutoResetEvent event1 = new AutoResetEvent(false);
    AutoResetEvent event2 = new AutoResetEvent(false);

и установил только

public void OnValueAvailable()
    {
        while (true)
        {
            event1.Set();
            event2.WaitOne();
            stack1.doSum();
            SetTextbox3(stack1.getsum().ToString());


        }
    }

, но все еще на шаг впереди фактического результата

...