Потоки и InvokeRequired - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть пример, он работает, но честно говоря через 5 точку, не так как ожидается. Есть два потока, основной, в котором работает программа, и второй поток, в котором происходит считывание данных с встроенного АЦП(плата pciе). Для перехода во второй поток используется это:
                Thread thread = new Thread(this.threadFunc);
                threadRun = true;
                thread.Start();

threadFunc

соответственно:
while()
{ считываем данные с АЦП...... 
UpdateDataStream();
}
и сама функция

UpdateDataStream

:
private void UpdateDataStream()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new updateDateDelegate(this.UpdateDataStream));
            }
            else
            {
 ЗДЕСЬ, Я НАМЕРЕВАЮСЬ, ИСПОЛЬЗУЯ МАССИВ ИЗ threadFunc(), построить точки на графике,  
            }
        }
Вначале определяется:
        private delegate void updateDateDelegate();
Вопрос заключается в самом процессе выход из 2 потока обратно в основной. InvokeRequired - как я понял это флаг, говорящий о возможности прекратить 2 поток, Invoke фактически производит переход из 2 в основной. НО! По какому событию срабатывает сам InvokeRequired??? как задать, допустим, для этого значение в 100мсек?(каждые 100мс чтобы переходил из 2 в основной?)

Решение задачи: «Потоки и InvokeRequired»

textual
Листинг программы
         //этот метод работает в контексте вторичного потока
         void threadFunc()
         {
            while(true)
            {
               //считываем данные с АЦП......
               int data = 0; //например, это данные с АЦП
               Thread.Sleep(100);
               SynchronizationContext context = SynchronizationContext.Current;
               context.Post(x => UpdateDataStream(data), null);
            }
         }
 
         //а этот метод будет выполнен в контескте первичного потока
         void UpdateDataStream(int data)
         {
            //Print(data);
         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5