Добавление пользовательского элемента управления «Неверный перечислитель» - PullRequest
1 голос
/ 18 июля 2010

Я использую Visual Studio 2010 для создания небольшого приложения WPF.Я создал пользовательский элемент управления, который сейчас пытаюсь добавить в основную форму.Пользовательский элемент управления отображается в панели инструментов, но каждый раз, когда я пытаюсь перетащить элемент управления в форму, я получаю сообщение об ошибке:

Перечислитель недействителен, так как коллекция изменилась.

Я должен знать, что случилось, и меня беспокоит, что я не могу понять это.

Ответы [ 4 ]

6 голосов
/ 18 июля 2010

У вас есть ошибка в конструкторе usercontrol - вы используете цикл foreach над IEnumerable, и пока цикл работает, IEnumerable изменяется, это не допускается с циклом foreach.Вместо этого используйте цикл for, если вы манипулируете коллекцией, для которой вы выполняете итерацию.

0 голосов
/ 12 августа 2012

Вам необходимо:

  1. Удалить ссылку на DLL
  2. Добавить ссылку на ваш элемент управления
  3. Перестройте решение
  4. Добавьте ваш контроль. Это должно работать!
0 голосов
/ 18 июля 2010

Для правильной работы пользовательского элемента управления вам необходим конструктор, который принимает нулевые аргументы.Таким образом, у конструктора форм есть способ визуализации элемента управления «по умолчанию».

Затем я перегружал конструктор, чтобы получить аргументы, необходимые для фактического запуска элемента управления, и все работало, как ожидалось.

0 голосов
/ 18 июля 2010

Проблема в том, что вы не знаете, какой код вызывает исключение.

WPF ужасен в отношении исключений, особенно в конструкторах. Фреймворк настаивает на том, чтобы перехватывать и повторно выдавать новое исключение, обычно несколько раз, и трудно найти исходную трассировку стека. Я обнаружил, что самый простой способ отследить такого рода ошибки - сказать Visual Studio прекратить работу, как только будет сгенерировано исключение, вместо того, чтобы ждать, пока WPF не перезапустит его пару раз и затруднит копание деталей. вне.

У меня нет Visual Studio 2010 передо мной, но вот как это сделать в VS2008 - 2010, вероятно, похоже:

  • Перейти в меню «Отладка»> «Исключения ...»
  • Рядом с «Общими исключениями языка среды выполнения» установите флажок в столбце «Брошенный»

Затем снова отладьте ваше приложение. Он остановится на линии, которая на самом деле вызывает проблему, и вам будет намного легче увидеть, что происходит. И если вы все еще не уверены, почему возникает исключение, вы сможете опубликовать пример кода.

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