Непонятки с потоками (попытка доступа к элементу управления не из того потока, в котором он был создан) - C#
Формулировка задачи:
Здравствуйте коллеги.
Подскажите пожалуйста, как реализовать вывод на форму информации записанной в регистрах устройства, подключенного к последовательному порту компьютера.
На данный момент я могу при помощи готового кода реализовать чтение только одного регистра и вывод его на форму. При попытке вывести хотя бы два, при запуске приложения возникает ошибка потоков.
Для вывода одного использую этот код:
Сначала думал что достаточным будит добавить в этом коде строчки например:
однако нет))
Как быть пока не знаю…может кто чем сможет помоч.
Заранее спасибо.
#region GUI Объявление делегатов public delegate void GUIDelegate(string paramString); public delegate void GUIClear(); public delegate void GUIStatus(string paramString); #endregion #region Функции делегатов public void DoGUIClear() { if (this.InvokeRequired) { GUIClear delegateMethod = new GUIClear(this.DoGUIClear); this.Invoke(delegateMethod); } else this.Indication1.Items.Clear(); } public void DoGUIStatus(string paramString) { if (this.InvokeRequired) { GUIStatus delegateMethod = new GUIStatus(this.DoGUIStatus); this.Invoke(delegateMethod, new object[] { paramString }); } else this.lblStatus.Text = paramString; } public void DoGUIUpdate(string paramString) { if (this.InvokeRequired) { GUIDelegate delegateMethod = new GUIDelegate(this.DoGUIUpdate); this.Invoke(delegateMethod, new object[] { paramString }); } else this.Indication1.Items.Add(paramString); } #endregion
this.Indication2.Items.Add(paramString)
Решение задачи: «Непонятки с потоками (попытка доступа к элементу управления не из того потока, в котором он был создан)»
textual
Листинг программы
public void DoGUIUpdate(string paramString) { // Это свойство показывает, что метод нужно вызывать через инвок, т.к. контрол находится в другом потоке if (this.InvokeRequired) { // Создаем делегат для метода DoGUIUpdate GUIDelegate delegateMethod = new GUIDelegate(this.DoGUIUpdate); // Вызываем делегат delegateMethod this.Invoke(delegateMethod, new object[] { paramString }); } else this.Indication1.Items.Add(paramString);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д