Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Обнаружение запуска в основном потоке в библиотеке С#

Автор вопроса: stachuОтветов: 2

Я создаю dll C#, которая будет использоваться другими разработчиками в WinForms. По некоторым причинам я хочу определить, вызываются ли методы из этой библиотеки из основного (GUI) потока, и предупредить разработчика, что он сделал такую ​​вещь (т.е. в файле журнала). Есть ли разумный способ определить метод вызова из основного потока? Помните, что у меня нет доступа к приложению WinForm.

multithreadingwinforms

Ответы

Ответ 1 · рейтинг 17 · ageektrapped

Простое решение в этом случае - объявить статический элемент управления в сборке библиотеки, созданной в потоке основного пользовательского интерфейса. Если вы хотите определить, вызывается ли библиотека из основного потока, используйте следующее

if (MyLibraryControl.InvokeRequired)
  //do your thing here

Ответ 2 · рейтинг 2 · Marc Gravell

Самый простой вариант (если у вас есть под рукой форма/элемент управления) - проверить InvokeRequired.

Если это не так, вы можете попробовать использовать SynchronizationContext для имитации публикации или отправки, проверяя, в каком потоке это происходит? Вызов Send или Post переключит поток пользовательского интерфейса.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы