我正在使用 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。
请帮忙!谢谢!
我想 new Program() 创建程序,调用 p.Execute() ,它再次创建 new Program() 并调用 p.Execute 等等...无限递归导致堆栈溢出。
您似乎是从
Execute()
内部呼叫 Execute()
。这将导致堆栈不断增长,因为进程不断将新的 Execute 上下文放置在彼此之上,在函数实际完成之前无休止地调用 Execute。这导致了StackOverflowException
我面临着同样的例外,但我的回答可能对其他人有帮助。我正在使用 Therads、计时器、后台工作线程和图形对象。所以我认为他们是罪魁祸首,但一旦我删除了 Random() 方法。这个异常停止了。