c#未处理的'System.StackOverflowException类型异常

本文关键字:System StackOverflowException 类型 异常 未处理 | 更新日期: 2023-09-27 18:05:02

希望我能解释清楚。我有一个倒计时定时器-用户输入时间等,并选择如果他们想从单选按钮打开最小大小或最大大小。根据他们的选择,它将加载最小形式或最大形式,时间将值输入UserControl形式将传递并开始倒计时。现在在用户控制表单上有暂停/停止、重置等按钮。我想把这些换成最小/最大形式。我希望我这样做的最简单的方法是隐藏用户控制表单上的按钮,然后尝试将其连接到最小/最大表单上的按钮,所以如果他们按下它,就像按下用户控制按钮一样。然而,我在标题中得到错误-它突出显示黄色下面的语句(下一个语句将被执行)....

(注意-这行代码是在最小的形式-我需要声明它的一个新的实例,所以我可以调用函数PauseMinClick(在MinForm暂停按钮)_我希望它调用btnPauseClick函数是在CountdownUserControl)。

    private CountdownUserControl CU = new CountdownUserControl();
    private void PauseMin_Click(object sender, EventArgs e)
    {
        CU.btnPause_Click(sender, e);
    }

并突出显示下面绿色的语句(当线程从当前函数返回时执行的下一条语句)…

    private Min _Min = new Min();

(这是在我的CountdownUserControl类-注意,我需要它的一个实例在这里传递的值必须倒计时。有人知道我应该做什么来解决这个容易吗?理想情况下,我不想重新编写大量的代码-我只是想让它与新表单上的按钮Max/Min一起工作,但连接起来,就好像它们被按在UserControl表单上一样(它们都工作得很好)。

Many Thanks - Colly

c#未处理的'System.StackOverflowException类型异常

听起来像这样:

class CountdownUserControl
{
    private Min _Min = new Min();
    // Other stuff...
}
class Min
{
    private CountdownUserControl CU = new CountdownUserControl();
    // Other stuff...
}

换句话说,要创建Min的实例,您需要创建CountdownUserControl的实例…这反过来需要创建一个Min的实例…这反过来需要创建一个CountdownUserControl的实例…你知道你为什么有问题了吗?

我不太清楚你想达到什么目的,但这就是问题的原因。也许中的一个类应该在其构造函数中接受参数,以允许它引用另一个类的实例?

你说这是在CountdownUserControl类吗?如果是,问题就在这里:

 private CountdownUserControl CU = new CountdownUserControl(); 

它创建了一个新的CountdownUserControl,它创建了一个CountdownUserControl,它.....等等,直到堆栈溢出