Я пишу C# приложение WPF с элементом управления вкладками в элементе управления вкладками. В элементе управления основной вкладки (tcMain) есть четыре элемента вкладки: tiOne, tiTwo, tiThree и tiFour. В tiOne есть еще один элемент управления вкладками (tcAnswers), который необходимо перенести на выбранную вкладку, когда пользователь нажимает на другую из четырех вкладок tcMain.
Проблема: приложение выдает ошибку ... Помощник по управляемой отладке «FatalExecutionEngineError» обнаружил проблему в «QuestionaireApp.exe».
Дополнительная информация: среда выполнения обнаружила фатальную ошибку. Адрес ошибки был 0x6dfda7d0, в потоке 0x20d8. Код ошибки 0x80131623. Эта ошибка может быть ошибкой в CLR или в небезопасных или не поддающихся проверке частях пользовательского кода. Распространенные источники этой ошибки включают в себя ошибки пользовательского маршалинга для COM-взаимодействия или PInvoke, которые могут повредить стек.
Я установил флажок в меню Инструменты> Параметры> Отладка> Общие> Использовать режим управляемой совместимости. Вот мой код. Строка, в которой происходит ошибка, содержит комментарий.
private void tcMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// First, let's get the old and new tab items...
TabItem tiOld = tcMain.Items[currentTab] as TabItem;
TabItem tiNew = tcMain.SelectedItem as TabItem;
// Good job! Now let's see which one is the selected tab item and remove the controls...
if (tiOld.Name != "tiMatchUp" && tiNew.Name != "tiMatchUp")
{
if (tiOld.Name == "tiOne")
{
RemoveStuff(grdOne);
}
else if (tiOld.Name == "tiTwo")
{
RemoveStuff(grdTwo);
}
else if (tiOld.Name == "tiThree")
{
RemoveStuff(grdThree);
}
else if (tiOld.Name == "tiFour")
{
RemoveStuff(grdFour);
}
// Now we add the controls to the newly selected tab item...
if (tiNew.Name == "tiOne")
{
grdOne = AddStuff(grdOne);
}
else if (tiNew.Name == "tiTwo")
{
grdTwo = AddStuff(grdTwo);
}
else if (tiNew.Name == "tiThree")
{
grdThree = AddStuff(grdThree);
}
else if (tiNew.Name == "tiFour")
{
grdFour = AddStuff(grdFour);
}
// Finally, we update the currentTab to the selected index...
CurrentTab = tcMain.SelectedIndex;
blProjectIsSaved = false;
}
private void RemoveStuff(Grid sentGrid)
{
sentGrid.Children.Remove(tcAnswers); //ERROR OCCURS HERE.
}
private Grid AddStuff(Grid sentGrid)
{
sentGrid.Children.Add(tcAnswers);
return sentGrid;
}