nipen.mehta Ответов: 1

Как перейти к множественной форме в WPF в соответствии с выбором параметра. Typeinitializationexception был необработан usercode


На моем Btn_Cart нажмите в соответствии с типом сущности перенаправления страницы на соответствующую форму. Когда я заказываю один продукт, первый раз его прошел без каких-либо ошибок. После первого добавления продукта, если я вернусь и снова вернусь на эту страницу и выберу другой тип продукта, то ошибка появится в первой строке инициализации окна. Если в первый раз я выбрал тип события product, то ниже появляется ошибка, когда я пытаюсь забронировать другой тип продукта во время инициализации окна.
Ошибка :
The type initializer for 'WPFKioskDAUZ.ProductAddtoCartWindow' threw an exception.

В другом сценарии, если во второй раз я делаю то же самое бронирование EntityType, что и в первый, то ошибки нет.

Возвращаясь к этому экрану
BookingYourTicketsWindow
и
ProductAddtoCartWindow
окно у меня ниже кода на кнопке Назад.
private void Btn_Back(object sender, RoutedEventArgs e)
        {
            
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            this.Close();
        }


Что я уже пробовал:

private void Btn_Cart(object sender, RoutedEventArgs e)
{
	
	if (EntityType == "12")
	{
		SyncProcces();
	}
	else if (EntityType == "5")
	{
		SyncProccesEvent();
	}
}

/// 
/// in case of event 
/// 
private void SyncProccesEvent()
{
	//throw new NotImplementedException();
	BookingYourTicketsWindow eventBooking = new BookingYourTicketsWindow();
	eventBooking.Owner = Application.Current.MainWindow;
	eventBooking.ShowInTaskbar = false;
	eventBooking.Tag = "ChildWindow";
	eventBooking.Owner = this;
	eventBooking.Top = this.Top;
	eventBooking.Left = this.Left;
	eventBooking.Show();
	//eventBooking.ShowDialog();
}

/// 
/// in case of product
/// 
private void SyncProcces()
{
	//throw new NotImplementedException();
	try
	{
	   ProductAddtoCartWindow ProductBooking = new ProductAddtoCartWindow();
		ProductBooking.Owner = Application.Current.MainWindow;
		ProductBooking.ShowInTaskbar = false;
		ProductBooking.Tag = "ChildWindow";
		ProductBooking.Owner = this;
		ProductBooking.Top = this.Top;
		ProductBooking.Left = this.Left;
		ProductBooking.Show();
		//ProductBooking.ShowDialog();

		

	}
	catch (Exception ex)
	{
		//HideLoader();
		//PopUpAlert NewAlert = new PopUpAlert("No Tickets Available");
		//MainWindowPannel.Children.Add(NewAlert);
	}
}

Graeme_Grant

Есть ли внутреннее исключение? Пожалуйста, обновите свой вопрос с помощью внутреннего сообщения об исключении, нажав на кнопку Вопрос улучшить .

nipen.mehta

Я действительно обновил вопрос. Его TypeInitializationException не обрабатывается usercode.

Graeme_Grant

Похоже, это внешнее сообщение об ошибке... Я ожидаю, что появится внутреннее сообщение об ошибке с дополнительной информацией.

nipen.mehta

Кроме этого, нет другого исключения. Это исключение возникает только тогда, когда я пытаюсь добавить еще один продукт EntityType, как вы можете видеть, у меня есть 2 EntityType(12 и 5). Архитектура очень проста. В соответствии с типом EntityType мне нужно показать другое окно.

Graeme_Grant

ошибка появляется в первой строке инициализации окна - не могли бы вы добавить свой метод конструктора окна, так как он отсутствует в вопросе - спасибо.

nipen.mehta

общественные BookingYourTicketsWindow()
{
метод InitializeComponent();
...
}

общественные ProductAddtoCartWindow()
{
метод InitializeComponent();
...
}

1 Ответов

Рейтинг:
2

Graeme_Grant

Хорошо, я использовал вашу концепцию и собрал для вас образец проволочного каркаса.

Главное Окно Xaml:

<Window x:Class="WpfWindows.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfWindows"

        mc:Ignorable="d" WindowStartupLocation="CenterScreen"

        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Orientation="Horizontal"

                    HorizontalAlignment="Center" 

                    VerticalAlignment="Center">
            <Button x:Name="Action1" Content="Action1" 

                    Padding="10 5" Margin="5"

                    Click="Action_Click"/>
            <Button x:Name="Action2" Content="Action2" 

                    Padding="10 5" Margin="5"

                    Click="Action_Click"/>
        </StackPanel>
    </Grid>
</Window>
Главное Окно С Выделенным Кодом:
using System.Windows;

namespace WpfWindows
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Action_Click(object sender, RoutedEventArgs e)
        {
            Window window = null;            
            if (sender == Action1)
                window = new Window1();
            else
                window = new Window2();
            window.Owner = this;
            window.Show();
        }
    }
}
Window1 Xaml:
<Window x:Class="WpfWindows.Window1"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfWindows"

        mc:Ignorable="d" WindowStartupLocation="CenterOwner"

        Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Viewbox>
            <TextBlock Text="Window1"/>
        </Viewbox>
        <Button x:Name="Back" Grid.Row="1"

                Padding="10 5" Margin="10"

                HorizontalAlignment="Center"

                Content="BACK"

                Click="Back_Click"/>
    </Grid>
</Window>
Код Window1-Позади:
using System.Windows;

namespace WpfWindows
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Back_Click(object sender, RoutedEventArgs e)
        {
            Close();
        }
    }
}
Window2 Xaml:
<Window x:Class="WpfWindows.Window2"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfWindows"

        mc:Ignorable="d" WindowStartupLocation="CenterOwner"

        Title="Window2" Height="300" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Viewbox>
            <TextBlock Text="Window2"/>
        </Viewbox>
        <Button x:Name="Back" Grid.Row="1"

                Padding="10 5" Margin="10"

                HorizontalAlignment="Center"

                Content="BACK"

                Click="Back_Click"/>
    </Grid>
</Window>
Код Window2-Позади:
using System.Windows;

namespace WpfWindows
{
    public partial class Window2 : Window
    {
        public Window2()
        {
            InitializeComponent();
        }

        private void Back_Click(object sender, RoutedEventArgs e)
        {
            Close();
        }
    }
}

Как вы увидите, все работает, как и ожидалось.

Итак, это говорит мне о том, что в вашем коде в одном из этих окон есть проблема, BookingYourTicketsWindow в этом случае.

Время, чтобы сделать некоторые отладки... Что я рекомендую, так это закомментировать части или весь ваш код, чтобы убедиться, что окно открывается, закрывается и снова открывается без ошибок. Если проблема все еще существует, то проблема заключается в вашем Xaml. Соедините это обратно постепенно, пока ошибка не исчезнет, тогда вы определили проблему. То же самое касается кода, если ошибка не находится в Xaml, медленно повторно вводите части, пока ошибка не появится снова.

Удачи! :)