无法为第二个实例 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
我在处理我的程序的两个实例时在保存配置文件时遇到问题。我能够在一个看起来像这样的简单示例项目中重现此问题:
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