InitializeComponent()中的C#'System.StackOverflowException'

时间:2014-01-02 17:31:53

标签: c# stack-overflow

这个程序的主要部分似乎与例外有关。

using System.Drawing;
using Framework.pages;

namespace Framework
{
   public partial class MainWindow : Window
   {
       public string status;
       public MainWindow()
       {
           InitializeComponent(); // Unhandled exception here
           InitializeTheme();

           activationStep page = new activationStep();
           page.loadPage();
       }
       // etc etc

这是抽象类

 namespace Framework.pages
 {
     abstract class template : MainWindow
     { 
         public abstract void loadPage();
         public abstract void loadTheme();
     }
 }

这是激活步骤类

using System.Windows.Media;

namespace Framework.pages
{
    class activationStep : template
    {
        public override void loadPage()
        {
            //this.loadTheme();
        }

        public override void loadTheme()
        {
            // Default green activation button
            //activateButton.Background = (SolidColorBrush)new BrushConverter().ConvertFromString(Framework.theme.darkGreen);
            //activateButton.BorderBrush = (SolidColorBrush)new BrushConverter().ConvertFromString(Framework.theme.borderGreen);
            // Set form error color to red
            //activationFormError.Foreground = System.Windows.Media.Brushes.Red;
        }
        // etc etc

问题是如果我从MainWindow类中注释掉这两行:

activationStep page = new activationStep();
page.loadPage();

该程序运行正常,尽管activStep类中的所有内容都被注释掉了(即使它们没有被注释掉)?我完全不知道为什么我得到这个特殊的例外,因为肯定没有任何强烈的循环或任何东西。

- 值得注意的是,表单中加载的组件确实不多,而且通常运行顺畅。

1 个答案:

答案 0 :(得分:7)

你正在“追加”来自activationStep的{​​{1}},后者又来自template,其构造函数会创建一个新的MainWindow ...等等。

此循环运行一段时间,然后您获得activationStep

您需要重新考虑您的设计。