потоки winforms
От: Аноним  
Дата: 10.12.10 10:12
Оценка:
есть код:

foreach(string str in mng.get_org_names()) {
                    if(treeView1.Nodes.IndexOf(new TreeNode(str)) == -1)
                        treeView1.Nodes.Add(str);
                }


при его выполнении выскакивает ошибка: Действие, выполняющееся для данного элемента управления, вызвано из неверного потока. Для выполнения данного действия перейдите в правильный поток с помощью Control.Invoke или Control.BeginInvoke. Подскажите, что это значит вообще и как от этого избавиться

11.12.10 18:16: Перенесено модератором из '.NET' — TK
Re: потоки winforms
От: Lloyd Россия  
Дата: 10.12.10 10:14
Оценка: +2 :))) :)
Здравствуйте, Аноним, Вы писали:

А>при его выполнении выскакивает ошибка: Действие, выполняющееся для данного элемента управления, вызвано из неверного потока. Для выполнения данного действия перейдите в правильный поток с помощью Control.Invoke или Control.BeginInvoke. Подскажите, что это значит вообще


Это означает, что действие, выполняющееся для данного элемента управления, вызвано из неверного потока

А>и как от этого избавиться


перейдите в правильный поток с помощью Control.Invoke или Control.BeginInvoke
Re: потоки winforms
От: Pavel_Agurov Россия  
Дата: 10.12.10 10:14
Оценка:
А>при его выполнении выскакивает ошибка: Действие, выполняющееся для данного элемента управления, вызвано из неверного потока. Для выполнения данного действия перейдите в правильный поток с помощью Control.Invoke или Control.BeginInvoke. Подскажите, что это значит вообще и как от этого избавиться

Может вы будете смеяться, но надо так и сделать — вызывать BeginInvoke у формы. Т.е все эти действия оформить как отдельный метод и запихать его в BeginInvoke.
Re[2]: потоки winforms
От: Lloyd Россия  
Дата: 10.12.10 10:16
Оценка:
Здравствуйте, Pavel_Agurov, Вы писали:

А>>при его выполнении выскакивает ошибка: Действие, выполняющееся для данного элемента управления, вызвано из неверного потока. Для выполнения данного действия перейдите в правильный поток с помощью Control.Invoke или Control.BeginInvoke. Подскажите, что это значит вообще и как от этого избавиться


P_A>Может вы будете смеяться, но надо так и сделать — вызывать BeginInvoke у формы. Т.е все эти действия оформить как отдельный метод и запихать его в BeginInvoke.


Просто Invoke.
Re[3]: потоки winforms
От: _d_m_  
Дата: 10.12.10 10:52
Оценка:
Здравствуйте, Lloyd, Вы писали:

P_A>>Может вы будете смеяться, но надо так и сделать — вызывать BeginInvoke у формы. Т.е все эти действия оформить как отдельный метод и запихать его в BeginInvoke.


L>Просто Invoke.


Какой ты категоричный.
Зависит от контекста. Где-то надо именно BeginInvoke.
Re[4]: потоки winforms
От: Lloyd Россия  
Дата: 10.12.10 10:56
Оценка:
Здравствуйте, _d_m_, Вы писали:

P_A>>>Может вы будете смеяться, но надо так и сделать — вызывать BeginInvoke у формы. Т.е все эти действия оформить как отдельный метод и запихать его в BeginInvoke.


L>>Просто Invoke.


___>Какой ты категоричный.

___>Зависит от контекста. Где-то надо именно BeginInvoke.

Контекст (проблема) достаточно ясно обрисована в первом посте. Тащить сюда еще и асинхронность ну ваабще не в тему.
Re: потоки winforms
От: master_of_shadows Беларусь  
Дата: 10.12.10 14:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите, что это значит вообще и как от этого избавиться


Это озночает, что модификация UI идёт из другого потока, не того, в котором создан UI.
Лечится выполнением работы по заполнению дерева в потоке UI. Либо пересмотром логики app либо через Invoke().
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.