Насколько программно можно найти собственный поток управления - PullRequest
1 голос
/ 13 февраля 2012

Требуется, чтобы все элементы управления .net создавались в главном потоке, по крайней мере, это необходимо, если целью является интеграция элемента управления с интерфейсом, который обычно имеет место.Кроме того, чтобы изменить свойства элемента управления, необходимо вызвать метод из потока элемента управления с использованием его собственного метода invoke.

Есть ли способ просмотреть элемент управления и напрямую идентифицировать его собственный поток?

Дополнительно или наоборот, возможно ли определить, является ли текущий поток «Основным потоком»?Есть ли что-то особенное в потоке, который Visual Studio определяет как основной поток, который можно увидеть во время выполнения, или это просто то, что это первый поток, который VS выполняет для инициализации отладки?

1 Ответ

5 голосов
/ 13 февраля 2012

Дополнительно или наоборот, возможно ли определить, является ли текущий поток "Основным потоком"?

Вы можете использовать Control.InvokeRequired , чтобы увидеть,ты в соответствующей теме.Если это не так, вы должны использовать Control.Invoke или Control.BeginInvoke , чтобы перенаправить вызов обратно в поток-владелец.

Есть ли что-нибудьОсобо о потоке, который Visual Studio определяет как основной поток, который можно увидеть во время выполнения, или это просто то, что это первый поток, который VS выполняет для инициализации отладки?

Это на самом деле поток, которыйиспользуется для создания SynchronizationContext , который обрабатывает насос сообщений Windows.Этот поток будет (или должен) всегда помечаться как поток STA (см. Thread.ApartmentState ) и иметь соответствующий контекст синхронизации и работающий насос сообщений.Метод Application.Run устанавливает это в основном потоке в обычном приложении Windows Forms.

...