Я пишу приложение WinForms на C #.
В какой-то момент в приложении я создал новый поток STA (создайте поток, затем SetApartmentState
), который создает новую форму, а затем показывает ее с простым старым Show()
. Сама форма содержит только закрепленный DataGrid
, чей DataSource
указывает на DataTable
, полученный из недавно открытого SqlConnection
. Все данные и объекты пользовательского интерфейса создаются в одном потоке.
Когда я выполняю этот код, я получаю исключение LoaderLock
со следующим (полезным) текстом:
Попытка управляемого выполнения внутри ОС
Блокировка погрузчика. Не пытайтесь бежать
управляемый код внутри DllMain или изображения
функция инициализации, так как это делает
может привести к зависанию приложения.
Я не делаю таких вещей, по крайней мере, намеренно! Трассировка стека имеет только неуправляемый код во главе, и я не могу отладить его в C # Express 2008.
Просматривая интернет, люди обычно просто отключают это исключение в VisualStudio. Является ли это еще одним случаем того, что Microsoft является падантиком, или я действительно должен потратить время на выяснение того, что происходит?
Обновление Ошибка, по-видимому, вызвана быстрым открытием нескольких форм (каждая с сеткой данных и т. Д.). Если я переключу Show()
на ShowDialog()
и посмотрю формы по одному, ошибка исчезнет.