-1

所有,我有一个应用程序我想从另一个应用程序或作为一个独立的实用程序启动。为了方便从 appB 启动 appA,我在Main()/Program.cs中使用了以下代码

[STAThread]
static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new SqlEditorForm(args));
} 

现在,在SqlEditorForm我有两个构造函数

public SqlEditorForm(string[] args)
    : this()
{
    InitializeComponent();

    // Test if called from appB...
    if (args != null && args.Count() > 0)
    {
        // Do stuff here...
    }
}

和聋哑人

public SqlEditorForm()
{
    // Always do lots of stuff here...
}

这对我来说看起来不错,但是当作为独立 ( args.Length = 0)运行时,SqlEditorForm(string[] args)构造函数被调用,并且在它进入构造函数执行之前InitializeComponent();,它会初始化该类的所有全局变量,然后直接进入默认构造函数。

问题,构造函数的链接似乎以错误的顺序发生。我想知道为什么?

谢谢你的时间。

4

1 回答 1

1

将所有逻辑移动到带参数的构造函数,并从无参数的构造函数中调用该构造函数,并传递默认参数值:

public SqlEditorForm()
    :this(null)
{        
}

public SqlEditorForm(string[] args)
{   
    InitializeComponent();
    // Always do lots of stuff here...

    if (args != null && args.Count() > 0)
    {
        // Do stuff here...
    }
}
于 2012-12-11T12:53:49.557 回答