Элементы управления WinForms UI становятся доступными только для чтения во время потоковой передачи, которая использует эти элементы управления внутри него
у меня есть один графический интерфейс, где у меня есть следующие элементы управления,
Панель инструментов, поле со списком, список, контекстное меню, ListView и Treeview.
проблема в том, что я передаю верхние элементы управления в одном потоке, который продолжает обновлять эти элементы управления.. таким образом, пока мой поток работает, я не могу нажать ни на один из элементов управления GUI.. да, я вижу обновленное значение в списке и других элементах управления, но пользователь не может нажать на какие-либо элементы управления GUI во время выполнения потока.
private void MethodXYZ() { this.Invoke(new MethodInvoker(delegate() { // loigc here mnuItemDatabase.Enabled = false //this line shows error when I am trying to remove Invoke from Logic })); }
ThreadStart TS1 = new ThreadStart(MethodXYZ); Thread Th1 = new Thread(TS1); Th1.Name = "ExecuteTestSession"; Th1.IsBackground = true; Th1.Start();
еще одна вещь, вся функция потока, которую я написал внутри "этого.INVOKE", причина, по которой я поместил метод thread внутри Invoke, заключается в том, что я использую элементы управления UI внутри него, и его бросок ниже исключения, если я удалю Invoke,
"Недопустимая операция кросс-потока: управление "именем формы", доступ к которому осуществляется из потока, отличного от потока, в котором он был создан."
Что я уже пробовал:
я попробовал с помощью Background worker и task factory вызвать метод thread.
Ralf Meier
Все части графического интерфейса принадлежат основному потоку и могут быть доступны, актуализированы и аннулированы только оттуда.
Правильный способ-это вызов, но ваш поток должен дать основному потоку время для работы. Так... каков код вашего потока ? У тебя была нить?Спать в нем ?
Varun_nayak
Мой метод, который находится в потоке, не имеет никакого кода сна,
В нем тысячи строк.. Иногда даже Лакс.. Запуск внутри цикла for, обновление списка GUI шаг за шагом со значениями, полученными из базы данных.
И я пытаюсь дать доступ к опции "пауза" пользователю между тем, но мой графический интерфейс получил замораживание. таким образом, пользователь может просто увидеть окно списка обновлений, но не может нажать на кнопку паузы.