【发布时间】:2021-07-20 09:25:25
【问题描述】:
我正在制作一个井字游戏程序(第一个 WPF,我对编码比较陌生),当我尝试运行它时遇到堆栈溢出异常。 (我只是在下面粘贴相关代码,而不是所有内容)我很确定它与 MainWindow mWW = new MainWindow 的部分有关,但我不确定如何在不这样做的情况下访问按钮。如果有人可以添加输入,那将有很大帮助。
public MainWindow()
{
InitializeComponent();
win();
}
private static void win()
{
var mWW = new MainWindow();
if (xWin == true)
{
mWW.lblWin.Content = "X's Wins!";
}
else if (oWin == true)
{
mWW.lblWin.Content = "O's Wins!";
}
}
【问题讨论】:
-
turn()是否调用win()?请与我们分享turn()。您确定要在win()中创建一个全新的(并且完全独立的)MainWindow吗?您似乎只想更改当前的(使用this关键字)。 -
MainWindow()调用win(),它调用MainWindow()(见var mWW = new MainWindow();),它调用win(),它调用MainWindow(),它调用win(),它调用@987654335 @,调用win(),调用MainWindow(),调用win(),调用MainWindow(),调用win(),调用MainWindow(),调用win(),调用MainWindow(),调用win(),调用MainWindow(),调用win(),调用MainWindow(),以此类推。 -
我不小心在其中包含了错误的课程。我没有调用 win(),而是调用了 turn()。我只是把它修好了,说它应该做什么。我将如何使用 this 关键字?会不会像 this.lblWin.Content = "O's Wins!";
-
是的,这正是它的样子。
-
您似乎决定通过创建一个新实例来修复您的
object reference required for non-static。非常错误。您应该通过使win()方法为非静态方法来修复它(即删除static关键字)。也就是说,看起来您正在使用 WPF,因此整个方法无论如何都是错误的;您是否应该在InitializeComponent()方法中检查是否成功是值得怀疑的,并且绝对是您不应该访问UI 元素来设置内容的情况。了解 MVVM 和数据绑定并正确使用 WPF。从长远来看,这会容易得多,虽然一开始会更难。
标签: c# exception .net-core stack-overflow