Я знаю, что есть другие сообщения, которые говорят, что вы можете создать элемент управления, а затем проверить свойство InvokeRequired
, чтобы увидеть, является ли текущий поток основным потоком или нет.
Проблема в том, что у вас нет способа узнать, был ли этот элемент управления создан в основном потоке.
Я использую следующий код, чтобы определить, является ли поток основным потоком (поток, который запустил процесс):
if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA ||
Thread.CurrentThread.ManagedThreadId != 1 ||
Thread.CurrentThread.IsBackground || Thread.CurrentThread.IsThreadPoolThread)
{
// not the main thread
}
Кто-нибудь знает лучший способ? Похоже, что этот способ может быть подвержен ошибкам или ломаться в будущих версиях среды выполнения.