Windows 窗体:StackOverflowException

问题描述 投票:0回答:3

我正在使用 C# 在 Visual Studio 2010 中构建一个 Windows 窗体。当我按下按钮时,我收到了 StackOverflowException 异常。我找到了一些替代方法来解决这个问题,但没有运气。

Program
是我创建的一个类,该类中有一个
Execute
函数正在执行所有密集计算等操作。

private void execute_Click(object sender, EventArgs e)
{
    Thread thread = new Thread(new ThreadStart(Execute));
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

private void Execute()
{
    Console.WriteLine("1111");
    Program p = new Program();
    p.function = "myNewFunction";
    p.inputfile = fileTextbox.Text;
    Console.WriteLine("2222");
    p.Execute(); //somehow never reaches here
}

当我运行它时,控制台只打印出 1111。我真的很困惑分配值如何创建 StackOverflowException。

请帮忙!谢谢!

c# forms stack-overflow
3个回答
4
投票

我想 new Program() 创建程序,调用 p.Execute() ,它再次创建 new Program() 并调用 p.Execute 等等...无限递归导致堆栈溢出。


3
投票

您似乎是从

Execute()
内部呼叫
Execute()
。这将导致堆栈不断增长,因为进程不断将新的 Execute 上下文放置在彼此之上,在函数实际完成之前无休止地调用 Execute。这导致了
StackOverflowException


0
投票

我面临着同样的例外,但我的回答可能对其他人有帮助。我正在使用 Therads、计时器、后台工作线程和图形对象。所以我认为他们是罪魁祸首,但一旦我删除了 Random() 方法。这个异常停止了。

© www.soinside.com 2019 - 2024. All rights reserved.