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

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


person stachu    schedule 22.10.2008    source источник


Ответы (2)


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

if (MyLibraryControl.InvokeRequired)
  //do your thing here
person ageektrapped    schedule 22.10.2008

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

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

person Marc Gravell    schedule 22.10.2008