C# Application.Restart() 启动程序两次

标签 c#

我遇到了一个奇怪的错误。我调用了 Application.Restart(); 方法,假设它将重新启动程序一次。但是,当我调用它时,它会重新启动并启动程序,而不是一次而是两次,从而在窗口上产生两种形式。为什么会这样?请帮忙!

这是我的代码:

Main.cs

 private void Login_Load(object sender, EventArgs e)
 {
     // DO some checkings here to see if setting is needed

     if (SettingIsNeeded)
     {
          SettingsForm Settings = new SettingsForm();
          Settings.Show();
     }
 }

SettingsForm.cs

    private void button1_Click(object sender, EventArgs e)
    {
        if (Settings.Default.COM != comboBox1.Text || Settings.Default.Gate_IP != textBox1.Text || Settings.Default.Server_Address != textBox2.Text) //Check if change has been made
        {
            Settings.Default.COM = comboBox1.Text;
            Settings.Default.Gate_IP = textBox1.Text;
            Settings.Default.Server_Address = textBox2.Text;
            Settings.Default.Save();
            settingschanged = true;
            this.Close();
        }
        settingschanged = false;
        this.Close();
    }

    private void COM_Settings_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (settingschanged)
        {
            Application.Restart(); //This is where only the method will be called for restart.
        }
    }

最佳答案

我只是在这里猜测,但如果您尝试这样做会发生什么?

private bool isRestarted;

private void COM_Settings_FormClosing(object sender, FormClosingEventArgs e)
{
    if (settingschanged && !isRestarted)
    {
        isRestarted = true;
        Application.Restart(); //This is where only the method will be called for restart.
    }
}

关于C# Application.Restart() 启动程序两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16880964/

相关文章:

c# - WCF - 如何有效地发送 GUID(不是字符串)

c# - 替换引号是否足以防止 SQL 注入(inject)?

c# - 想要检查是否存在youtube url(视频)以及使用vb.net发布/修改的日期

C# 编译器数字文字

c# - 如何在窗体或控制台中显示类库中变量的内容?

c# - MVC传模型来查看

javascript - Asp 按钮禁用 asp 日历上的月份更改

c# - C# 中的自定义值类型是什么,我如何创建它们?

c# - 从 XML 文档创建的 Json 反序列化到 POCO 不适用于数组

java - 从 Xamarin 中的 Java 绑定(bind)库接口(interface)访问属性