【问题标题】:An unhandled exception of type 'System.StackOverflowException' occurred in Window1.exe [closed]Window1.exe 中发生了“System.StackOverflowException”类型的未处理异常 [关闭]
【发布时间】:2020-06-14 22:10:40
【问题描述】:

我今天才开始收到这个异常,我正在为它的修复而苦恼。我想知道该怎么做,因为我没有找到其他有用的答案。我有这两个部分的代码,看起来我的代码正在循环,但我不知道如何解决。

 public partial class MainWindow : Window
    {
        //Produkt produkt = new Produkt("e", 12, 21, 1);
        string[] header = { "-----------------------------------------------------------", "            Pokus o pokladni software na MVOP", "        Asi to odevzdam pozdeji, protoze jsem nemel cas", "            Jo a taky neumim poradne programovat", "                takze jestli projdu ", "                TAK TO BUDE ZAZRAK", "-----------------------------------------------------------" };
        int pocet = 1;
        public double total = 0;
        string RegisteredUser = "test";
        public string cas = "now";
        DateTime zacatekObjednavky;
        TimeSpan casObjednavky;
        Window1 win2 = new Window1();
        Platba platba = new Platba();
        public double totalDPH;


        public MainWindow()
        {
            InitializeComponent();
            NovaObjednavka();
            DispatcherTimer timer = new DispatcherTimer();
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = new TimeSpan(0, 0, 1);
            timer.Start();
            zacatekObjednavky = DateTime.Now;
        }
  public partial class Platba : Window
    {
        double totalPlatba;
        double totalPuvodni;
        double zbytek;
        MainWindow Form;


        public Platba()
        {
            Form = new MainWindow();
            totalPuvodni = Form.total;
            InitializeComponent();
            totalPlatba = Form.total;
        }

但奇怪的是它会崩溃第三个窗口,这与循环表单无关,所以我有点困惑。

  public partial class Window1 : Window
    {
        int idUzivatele;
        public Window1()
        {
            InitializeComponent();
        }

感谢您的帮助

【问题讨论】:

标签: c# wpf visual-studio


【解决方案1】:

正如@Gusman 所指出的,您有一个递归调用结构。 @mjwills 建议阅读堆栈跟踪的工作原理。堆栈跟踪函数调用,以便它们知道完成后返回的位置。它会显示函数调用的顺序。

此外,学习如何单步执行代码而不是简单地运行它会很有帮助。您将看到初始化例程和构造函数的顺序,并且您的问题出在哪里会变得很明显。使用 Debug 菜单并使用“Step Into”而不是“Start Debugging”来启动您的项目。

在您的情况下,具体来说,您的 Platba 构造函数调用了Form = new MainWindow();。这很可能不是你想要的。相反,您可能希望将 MainWindow 作为参数传递给 Platba 构造函数。例如。 Platba platba = Platba(this);

    public Platba(MainWindow mainWindow)
    {
        Form = new MainWindow();
        totalPuvodni = mainWindow.total;
        InitializeComponent();
        totalPlatba = mainWindow.total;
    }

另外,更改 MainWindow 构造函数以初始化 Platba 和其他窗口。

    public MainWindow()
    {
        InitializeComponent();
        platba = new Platba(this);
        // ...
    }

【讨论】:

  • 嗯,我很清楚出了什么问题,但不知道如何解决,因为我需要在其他窗口中调用这些。
  • 我无法告诉你如何解决它,因为我无法预测你想要做什么。我已经更新了答案,为您指明了一个方向。您很可能不希望 MainWindow 创建一个 Platba,然后让 Platba 创建一个 MainWindow。从 Platba 构造函数中取出 MainWindow 新构造函数。
  • 我需要使用它们之间的表单中的几个变量,所以我需要以某种方式调用它们,例如我需要 Platba 窗口中的总变量,我在 MainWindow 中使用 Platba 中的几个组件,所以我需要像这样调用它
  • 将 Platba 构造函数更改为采用主要形式:Platba(MainWindow mainWindow)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
相关资源
最近更新 更多