Помощник по управляемой отладке «FatalExecutionEngineError» при перемещении tabcontrol - PullRequest
0 голосов
/ 28 января 2020

Я пишу 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;
    }
...