Изменение содержимого главного окна из класса Utils - PullRequest
0 голосов
/ 06 декабря 2018

Когда я пытаюсь изменить интерфейс пользователя из класса Utils, я получаю ошибку. Процесс завершается из-за исключения StackOverflowException.Произошло необработанное исключение типа «System.StackOverflowException» в ColdStorageDesktopApp.exe

 class Utils
            {
                MainWindow mainWindow = new MainWindow();
                private bool signedIn = false;

                public void UpdateUI()
                {
                    if (signedIn)
                    {
                        mainWindow.Sign_In_Button.Visibility = Visibility.Collapsed;
                        mainWindow.Sign_Out_Button.Visibility = Visibility.Visible;
                        mainWindow.Balance_Button.IsEnabled = true;
                        mainWindow.Send_Assets_Button.IsEnabled = true;
                        mainWindow.Settings_Button.IsEnabled = true;
                    }
                    else
                    {
                        mainWindow.Sign_In_Button.Visibility = Visibility.Visible;
                        mainWindow.Sign_Out_Button.Visibility = Visibility.Collapsed;
                        mainWindow.Balance_Button.IsEnabled = false;
                        mainWindow.Send_Assets_Button.IsEnabled = false;
                        mainWindow.Settings_Button.IsEnabled = false;
                    }
                }

, и это мой MainWindow.cs

public partial class MainWindow : Window
    {
        Utils utils = new Utils();

        public MainWindow()
        {
            InitializeComponent();

            utils.UpdateUI();
        }

1 Ответ

0 голосов
/ 06 декабря 2018

Исключение StackOverflow выдается, потому что у вас есть бесконечный цикл создания экземпляров объекта.

MainWindow создает Utils, который создает MainWindow, который создает Utils, который создает MainWindow, которыйсоздает Utils ... и т.д.

Вы не должны создавать MainWindow в Utils.В приложении должен быть только один экземпляр MainWindow.

Вместо этого укажите экземпляр MainWindow для экземпляра Utils в качестве параметра:

class Utils
{
    readonly MainWindow mainWindow;
    public Utils(MainWindow mainWindow)
    {
        this.mainWindow = mainWindow ?? throw new ArgumentNullException(nameof(mainWindow));
    }
}

class MainWindow
{
    readonly Utils utils;
    public MainWindow()
    {
        InitilaizeComponent();
        utils = new Utils(this);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...