C # Могу ли я создать элементы управления в другом потоке? - PullRequest
4 голосов
/ 04 ноября 2011

Обычно элементы управления создаются в главном потоке.Можно ли создать некоторые дочерние элементы управления в другом потоке?

Ответы [ 3 ]

7 голосов
/ 04 ноября 2011

тл, др Не делай этого .

Элементы управления могут быть созданы в другом потоке, однако , когда они добавляются в родительский элемент (созданный в другом потоке), тогда, вероятно, будет перекрестное Возникло исключение потока. Я не уверен, является ли это исключение «гарантированным», но не делает этого . (Существуют межпотоковые исключения вместо неявного маршалинга по причине ; лучше умереть быстрее, чем тупиком позже.)

Элементы управления перекрестными потоками и [winform] не смешиваются. Конечно, если разные формы находятся в разных потоках, и дочерние элементы каждой формы находятся в том же потоке, что и форма, и межпотоковый доступ защищен или используется с помощью "invoke" или аналогичного ... но форма не является " дочерний контроль.

Удачного кодирования.


Пример сообщения об исключении между потоками:

System.InvalidOperationException: Межпотоковая операция недопустима: Элемент управления '...' доступен из потока, отличного от потока, в котором он был создан.

3 голосов
/ 04 ноября 2011

Я не уверен, почему вы хотели бы сделать это. То, что я хотел бы сделать, это вызвать метод в главном потоке с помощью делегата и добавить туда элементы управления.

0 голосов
/ 11 февраля 2016

органов управления, нет. Формы, да.

Thread thread = new Thread( () =>
   {
         var yourForm = new YourForm();
         Application.Run(yourForm);
   });
thread.ApartmentState = ApartmentState.STA;
thread.Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...