我正在尝试使用 Task.Run(()=>方法)从线程写入我的app.config但是我在方法的第2行遇到IO错误下面
“System.IO.IOException:'进程无法访问文件'WpfApplication1.exe.Config',因为它正由另一个进程使用。'”
private static void UpdateCustomConfigSection(string sectionName, string key, string val)
{
var xmlDoc = new XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); //Error happens here
XmlNode selectSingleNode = xmlDoc.SelectSingleNode($"//{sectionName}/add[@key='{key}']");
if (selectSingleNode != null && selectSingleNode.Attributes != null)
{
selectSingleNode.Attributes["value"].Value = val;
}
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
ConfigurationManager.RefreshSection(sectionName);
}
我认为这种情况正在发生,因为主应用程序线程正在从文件中读取并阻止线程访问它。有推荐的方法吗?
答案 0 :(得分:1)
要使用app.config,您应该使用ConfigurationManager 见下面的例子:
private static void UpdateCustomConfigSection(string key, string val)
{
Configuration configuration = ConfigurationManager.OpenExeConfiguration(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
configuration.AppSettings.Settings[key].Value = val;
configuration.Save();
ConfigurationManager.RefreshSection("appSettings");
}
但如果问题是不同的话题,你可以使用Dispatcher.Invoke。
Dispatcher.Invoke(() =>
{
UpdateCustomConfigSection(sectionName,key, val);
});
在这种情况下,无论Dispatcher.Invoke构造在何处调用
,都应在UI线程中调用UpdateCustomConfigSection