不需要完全关闭和重新打开,如何重启C#应用程序?

4

如何使我的内部代码像使用Application.Restart()一样工作,但实际上不需要程序关闭和重新打开?


你到底想要做什么?重置一堆应用程序状态吗?运行特定的表单吗?为什么不能使用 Application.Restart() - D Stanley
3
这取决于你内部代码的设计。 - Andrew Cooper
是因为你在从VS中运行时丢失了调试状态吗?如果是这样,你可以让应用程序在一个循环中运行,并自己设置一个条件来检查是否满足该条件。我在实际生产代码中成功使用过这种方法。 - nawfal
1
@DStanley,我不希望用户在单击取消时看到应用程序关闭和重新打开。我只希望所有内部代码能够像使用Application.Restart()一样工作。 - Adam Johns
如果您重新启动应用程序,那么用户一定应该看到它。而且,不要试图隐藏问题,您应该毫不犹豫地修复它们。如果需要的话,请雇用更有能力的开发人员或者重写应用程序(如果它被编写得很差)。 - Phil1970
1个回答

6

根据您的应用程序设计,它可能只需要启动一个新的主窗体实例并关闭任何现有的窗体实例。除了表单变量之外的任何应用程序状态也需要重置。就像您正在寻找的那样,没有一个神奇的“重置”按钮可以重置应用程序。

一种方法是在Program.cs中添加一个循环来保持应用程序运行,如果窗体在“重置”后关闭:

static class Program
{
    public static bool KeepRunning { get; set; }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        KeepRunning = true;
        while(KeepRunning)
        {
            KeepRunning = false;
            Application.Run(new Form1());
        }
    }
}

在您的表单(或工具栏等)中将KeepRunning变量设置为true

private void btnClose_Click(object sender, EventArgs e)
{
    // close the form and let the app die
    this.Close();
}

private void btnReset_Click(object sender, EventArgs e)
{
    // close the form but keep the app running
    Program.KeepRunning = true;
    this.Close();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接