Два глюка, что мне жаль, что я не учился на горьком опыте:
(1) Большой вывод (такой как printf) буферизуется по умолчанию. Если Вы отлаживаете отказывающий код, и Вы используете буферизованные операторы отладки, последний вывод, который Вы видите, май не действительно последний оператор печати, с которым встречаются в коде. Решение состоит в том, чтобы сбросить буфер после каждой печати отладки (или выключить буферизацию в целом).
(2) Быть осторожным с инициализациями - (a) избегают экземпляров класса как globals / помехи; и (b) пытаются инициализировать все Ваши членские переменные к некоторому безопасному значению в ctor, даже если это - тривиальное значение, такое как ПУСТОЙ УКАЗАТЕЛЬ для указателей.
Обоснование: упорядочивание инициализации глобального объекта не гарантируется (globals, включает статические переменные), таким образом, можно закончить с кодом, который, кажется, перестал работать недетерминировано, так как это зависит от объекта X инициализируемый перед объектом Y. Если Вы явно не инициализируете переменную типа примитива, такую как участник bool или перечисление класса, Вы закончите с различными значениями в удивительных ситуациях - снова, поведение может казаться очень недетерминированным.
Я сам нашел причину проблемы благодаря подсказкам, приведенным в комментарии AnthonyWJones.
Похоже, что все в словаре ресурсов Silverlight должно быть доступно для совместного использования . Причина в том, что элементы внутри словаря ресурсов (вероятно) будут добавлены в нескольких местах в иерархии элементов управления.
У меня было два элемента в моем словаре ресурсов, которыми нельзя было поделиться.
РЕДАКТИРОВАТЬ : В WPF вы можете использовать атрибут x: Shared
для объектов внутри словаря ресурсов, чтобы заставить WPF создавать новый экземпляр для каждого извлечения ресурса. К сожалению, Silverlight не поддерживает этот атрибут.
Вероятно, НЕ ответ на этот вопрос , но другая распространенная причина, по которой вы можете получить это «Элемент уже является потомком другого элемента». ошибка возникает, если вы пытаетесь загрузить ресурс, например изображение, и неправильно указали имя файла.
IE особенно жалуется, будет жаловаться на это.
<Image ToolTipService.ToolTip="Email customer"
Source="../images/FILE-THAT-DOESNT-EXIST.png"></Image>
Однако, поскольку это связано с ресурсами, возможно, существует сценарий, в котором это будет ответом на этот вопрос: -)