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
关于它自己的信息(通过构造函数参数或 属性)?
首先,我有一个 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
关于它自己的信息(通过构造函数参数或 属性)?