System.StackOverflowException 调用 MainWindow 时

System.StackOverflowException when calling MainWindow

首先,我有一个 MainWindow(很明显),然后创建了一个名为 LoginWindow 的新 xaml 页面。

我有一个名为 Server_setup 的 class 文件来存储数据库访问数据。

Server_setup

public class Server_setup
{
    public readonly string Server = ConfigurationManager.AppSettings["Server"];
    public readonly string Port = ConfigurationManager.AppSettings["Port"];
    public readonly string User_ID = ConfigurationManager.AppSettings["User_ID"];
    public readonly string Password = ConfigurationManager.AppSettings["Password"];
    public readonly string Database = ConfigurationManager.AppSettings["Database"];
}

里面App.config

...<appSettings>
    <add key="Server" value="localhost" />
    <add key="Port" value="5432" />
    <add key="User_ID" value="postgres" />
    <add key="Password" value="admin" />
    <add key="Database" value="TestDatabase" />
</appSettings>...

一切正常,用户可以从 LoginWindow 登录并定向到 MainWindow。 问题是当我尝试添加一个名为 UpdateWindow 的新页面时。

经过大量问题搜索(逐行输入代码)后,我意识到在 UpdateWindow 中声明 mainWindow 时出现了 OverflowException。

登录窗口

public partial class LoginWindow : Window
{
    private readonly Server_setup server_Setup = new Server_setup();
    private readonly NpgsqlConnection iConnect = new NpgsqlConnection();
    MainWindow mainWindow = new MainWindow();
    public LoginWindow()
    {
        InitializeComponent();
        iConnect = new NpgsqlConnection
                                   (connectionString: $"Server = {server_Setup.Server};Port = {server_Setup.Port}; User ID = {server_Setup.User_ID};Password = {server_Setup.Password};Database = {server_Setup.Database}");
    }
    

主窗口

    private readonly Server_setup server_Setup = new Server_setup();
    private readonly NpgsqlConnection iConnect = new NpgsqlConnection();
    UpdateWindow updateWindow = new UpdateWindow();
    public MainWindow()
    {
        InitializeComponent();
        iConnect = new NpgsqlConnection
               (connectionString: $"Server = {server_Setup.Server};Port = {server_Setup.Port}; User ID = {server_Setup.User_ID};Password = {server_Setup.Password};Database = {server_Setup.Database}");
    }

更新窗口

 public partial class UpdateWindow : Window
{
    MainWindow mainWindow = new MainWindow(); //Error happened when this code is inserted
    public UpdateWindow()
    {
        InitializeComponent();
    }

知道为什么会发生错误吗?

查看调用栈,代码确实在MainWindow和LoginWindow之间重复出现

无论何时创建 MainWindow 的实例,都会创建 UpdateWindow 的实例。每当您创建 UpdateWindow 的实例时,您都会创建 MainWindow 的实例...然后将创建 UpdateWindow 的另一个实例,这将创建 MainWindow 的另一个实例,等等

我们无法真正了解您的 UI 以了解您在这里想要实现的目标,但您必须摆脱递归。您似乎不太可能真的 想为每个UpdateWindow 创建一个MainWindow 的新实例。也许 MainWindow 应该“告诉”UpdateWindow 关于它自己的信息(通过构造函数参数或 属性)?