Я создаю dll C#, которая будет использоваться другими разработчиками в WinForms. По некоторым причинам я хочу определить, вызываются ли методы из этой библиотеки из основного (GUI) потока, и предупредить разработчика, что он сделал такую вещь (т.е. в файле журнала). Есть ли разумный способ определить метод вызова из основного потока? Помните, что у меня нет доступа к приложению WinForm.
Вопрос
Обнаружение запуска в основном потоке в библиотеке С#
Ответы
Ответ 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.
Похожие материалы
- Boost :: shared_mutex мьютекс с несколькими читателями / одиночными записями
- Информирование ThreadPool.QueueUserWorkItem о требованиях к памяти
- Следите за ссылкой на данные (сколько / кто) в многопоточности
- Блокировка выхода из активности Android до завершения очистки
- Как получить тип содержимого веб-адреса?
- Получить организационную единицу из Active Directory с помощью С#