无法为第二个实例 WPF 保存配置文件

Config File cannot be saved for second instance WPF

我在处理我的程序的两个实例时在保存配置文件时遇到问题。我能够在一个看起来像这样的简单示例项目中重现此问题:

Class MainWindow
   Dim config As System.Configuration.Configuration

   Public Sub New()
      config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None)
   End Sub

   Protected Overrides Sub OnClosing(e As CancelEventArgs)
      config.Save(ConfigurationSaveMode.Modified, True)
   End Sub
End Class

第一个实例在关闭时保存配置,但是当我尝试关闭第二个实例时,config.Save(ConfigurationSaveMode.Modified, True) 抛出一个错误,指出配置文件被另一个程序更改。我希望有人能够帮助我解决这个问题。提前致谢。

编辑:忘记删除 MyBase 调用

edit2:尝试了 Chillzy 的建议,但也失败了。

   Protected Overrides Sub OnClosing(e As CancelEventArgs)
      Dim mdate As String = Date.Now.ToString("yyyyMMdd_HHmmss")
      Dim mptpath As String = Path.GetDirectoryName(config.FilePath) & "\" & mdate
      config.SaveAs(mdate, ConfigurationSaveMode.Full, True)
      File.Delete(fpath)
      File.Move(mptpath, fpath)
   End Sub

您正在通过在 OnClosing 结束时调用 OnClosing 来创建一个循环

  Protected Overrides Sub OnClosing(e As CancelEventArgs)
      config.Save(ConfigurationSaveMode.Modified, True)
  End Sub

那里。您复制加载配置文件然后另存为。重新读取 saveas 文件作为当前配置文件。在你出去的路上你做相反的事情

Imports System.Configuration
Imports System.IO

Public Class Form1

    Dim config As System.Configuration.Configuration
    Dim fpath As String = ""
    Dim mptpath As String = ""
    Public Sub New()
        config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None)
        fpath = config.FilePath
        Dim mdate As String = Date.Now.ToString("yyyyMMdd_HHmmss")
        mptpath = Path.GetDirectoryName(config.FilePath) & "\" & mdate & ".config"
        config.SaveAs(mptpath, ConfigurationSaveMode.Full, True)
        config = System.Configuration.ConfigurationManager.OpenExeConfiguration(mptpath)

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        File.Delete(fpath)
        config.SaveAs(fpath, ConfigurationSaveMode.Full, True)
        File.Delete(mptpath)
    End Sub
End Class