gpt4 book ai didi

c# - Slate.exe 中发生类型为 'System.StackOverflowException' 的未处理异常

转载 作者:行者123 更新时间:2023-12-03 03:14:50 25 4
gpt4 key购买 nike

我正在使用 C# 开发一个应用程序,意外地我开始收到此异常“Slate.exe 中发生了类型为‘System.StackOverflowException’的未处理异常”。

以下是我的代码的详细信息。

这是我初始化主类对象的类。

public class MenuControls
{
MainWindow MainWindowObj = new MainWindow(); //This thing is raising Exception.

public void SaveAs()
{

SaveFileDialog SFD = new SaveFileDialog();
if (SFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{

String FPath = SFD.FileName;
StreamWriter SWriter = new StreamWriter(File.Create(FPath));
SWriter.Write(MainWindowObj.PlayGround.Text);
SWriter.Dispose();

}
}

public void NewFile()
{
MessageBox.Show("You haven't saved your file yet ! Do you want to create new file?", "Something", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
}

public void OpenFile()
{
OpenFileDialog OFD = new OpenFileDialog();

if (OFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
StreamReader SReader = new StreamReader(File.OpenRead(OFD.FileName));
MainWindowObj.PlayGround.Text = SReader.ReadToEnd();
}
}
}

我的主类代码。我已经初始化了 MenuConrols 类的对象。

public partial class MainWindow : Form
{
public RichTextBox GetBox()
{
return PlayGround;
}
MenuControls Menu = new MenuControls();
TextEditor_Preferences Prefrences = new TextEditor_Preferences();

public int SaveStatus = 0;
TextEditor_Preferences PreferencesForm = new TextEditor_Preferences();
public MainWindow()
{

InitializeComponent();

}

private void MainMenuFile_SaveAs_Click(object sender, EventArgs e)
{
Menu.SaveAs();
SaveStatus = 1;
}

private void MainMenuFile_New_Click(object sender, EventArgs e)
{
if (SaveStatus == 0 && PlayGround.Text.Contains(" "))
{
Menu.NewFile();
} else
{
PlayGround.Text = "";
}

}

private void MainMenuFile_Open_Click(object sender, EventArgs e)
{
Menu.OpenFile();
}

private void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode.ToString() == "N")
{
if (SaveStatus == 0 && !String.IsNullOrWhiteSpace(PlayGround.Text))
{
DialogResult DResult = MessageBox.Show("You haven't saved your file yet ! Do you want to create new file?", "Something", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
if (DResult == DialogResult.Yes)
{
PlayGround.Text = "";
} else
{

}
}
else
{
PlayGround.Text = "";
}
}
else if (e.Control && e.KeyCode.ToString() == "O")
{
Menu.OpenFile();
}
else if (e.Control && e.KeyCode.ToString() == "S")
{
Menu.SaveAs();
SaveStatus = 1;
}
}
private void MainMenuEdit_Preferences_Click(object sender, EventArgs e)
{
PreferencesForm.ShowDialog();
}

}

请给我一个解决方案。 如果我遗漏了什么或者问题没有正确提出,请明确告知我。谢谢。

最佳答案

这是因为,您有一个永无止境的代码被执行,您正在 MenuControls 类中实例化 MainWindow 的实例:

public class MenuControls
{
MainWindow MainWindowObj = new MainWindow(); // note this

MainWindow 类中,您还有另一个字段 MenuControls 正在被初始化,因此当您创建 MainWindow 实例时,它会初始化 MenuControls 字段,它再次初始化它所拥有的 MainWindow 字段,并且不断这样做,从而导致 stackoverflow 异常。

public partial class MainWindow : Form
{
public RichTextBox GetBox()
{
return PlayGround;
}
MenuControls Menu = new MenuControls(); // note this

您需要从 MenuControls 类中删除 MainWindow 字段,反之亦然,我看到的是您不需要 MainWindow 字段在 MenuControl 类中,将其从那里删除。

关于c# - Slate.exe 中发生类型为 'System.StackOverflowException' 的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40635943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com