Я создаю dll C#, которая будет использоваться другими разработчиками в WinForms. По некоторым причинам я хочу определить, вызываются ли методы из этой библиотеки из основного (GUI) потока, и предупредить разработчика, что он сделал такую вещь (т.е. в файле журнала). Есть ли разумный способ определить метод вызова из основного потока? Помните, что у меня нет доступа к приложению WinForm.
Обнаружение запуска в основном потоке в библиотеке С#
Ответы (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