В Visual Studio 2010 зависает при открытии формы, содержащей пользовательский элемент управления в режиме конструктора
следующая моя проблема: У меня есть пользовательский UserControl в моем проекте Windows Forms. Я могу спроектировать его в дизайнере просто отлично. Но как только я хочу изменить форму, содержащую элемент управления Visual Studio 2010 аварийно завершает работу.
насколько я мог видеть, конструктор и Load-Event элемента управления выполняются при загрузке формы.
Я попытался использовать другой экземпляр VS2010 для отладки конструктора, но не смог найти место, где execption происходит.
сначала моя проблема, казалось, была в том, что для Threading.Timer
object, который я использую для инициализации моих объектов (т. е. загрузки значений из базы данных и т. д. (При ошибке повторите попытку позже ;))), функция обратного вызова была выполнена дизайнером, поэтому она попыталась получить доступ к объектам, к которым у нее не было доступа в режиме проектирования.
Инициализация Threading.Timer
объект находится в Load-событии. Но даже после того, как я прокомментировал все в событии load out (кроме блока try catch a Debugger.Break()
вызов точки останова во втором экземпляре VS2010 для отладки конструктора) Visual Studio продолжает сбой, как только я хочу изменить форму, содержащую элемент управления в режиме разработки.
Я пробовал некоторые шаги, которые я нашел здесь, без ответа на мою проблему: пользовательский элемент управления всегда аварийно завершает работу Visual Studio
поэтому, даже если дизайнеру нечего делать при разборе Load-Event или конструктора. Это все еще крахи.
есть ли у кого-нибудь идея, что я мог бы сделать, чтобы предотвратить сбой Visual Studio и правильное отображение пользовательского элемента управления в конструкторе форм?
проект, содержащий usercontrol также ссылается на некоторые пользовательские библиотеки и проект библиотеки. Я не знаю, Может ли проблема иметь какое-то отношение к этому.
3 ответов
решил как-то свою проблему...
как-то, пытаясь отладить режим конструктора я обманул себя.
задание отладчик.Break () в Load-Event была очень плохая идея при попытке открыть форму, содержащую пользовательский элемент управления в режиме конструктора, потому что если вы не отлаживаете Visual Studio с другим экземпляром Visual Studio, то отладчик.Break () остановит приложение и, следовательно, завершит работу Visual Studio Пример.
в конце концов, используя свойство DesignerMode пользовательского элемента управления, я смог предотвратить выполнение конструктором инициализации моего потока.Объекты Timer могут решить проблему таким образом.
У меня была эта же проблема (VS 2005), и отмеченный ответ также не работал для меня. Наконец, я смог решить проблему, удалив папки" obj "и" bin " в моем решении, а затем перестроив проект в режиме выпуска. Надеюсь, это поможет кому-то еще, у кого есть эта проблема.
в моей проблеме все решение разбилось каждый раз, когда я открывал его из-за режима проектирования, открывая виновный файл каждый раз, когда я открывал решение и, таким образом, вызывая сбой всего решения, это могло быть вызвано пользовательскими элементами управления, но я не мог получить доступ к решению для решения.
поэтому я нашел альтернативный способ просто позволить мне вернуться к моему кодированию.. Это не включало в себя очень глубокую отладку системных событий, я думаю, что это может помочь всем уровням пользователя, следовательно публиковать.
Я открыл файл aspx вне решения, буквально только файл кода интерфейса, можно было сделать в блокноте или любом текстовом редакторе, включая VS. Прокомментировал весь код (код java не имеет значения, поскольку ничто его не вызывает) Сохранил файл и закрыл. Снова открыл решение. Несмотря на то, что дизайнерский вид открылся, на этот раз он не разбился, поскольку обрабатывать было нечего. Затем я раскомментировал код в разделах, различные объемы кода, 20 строк, 100 строк... каждый раз возвращаясь в представление конструктора, чтобы проверить, не произойдет ли сбой. Когда я закончил (никаких сбоев! Я смог продолжить с того места, на котором остановился. Надеюсь, это поможет!