Обнаружение работы в основном потоке в библиотеке C # - PullRequest
7 голосов
/ 22 октября 2008

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

Ответы [ 2 ]

17 голосов
/ 22 октября 2008

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

if (MyLibraryControl.InvokeRequired)
  //do your thing here
2 голосов
/ 22 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...