Task.Run(()=>メソッド)を使用してスレッドからapp.configに書き込もうとしていますが、2行目にIOエラーが発生していますスレッドからapp.configにアクセスする際の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);
}
Iメインのアプリケーションスレッドがファイルから読み取りを行い、スレッドがスレッドにアクセスするのをブロックしているため、これが起こっているとします。これを行うための推奨される方法はありますか?
呼び出し、どこのUIスレッドで呼び出すべきである。この場合
appSettingsの外でカスタムセクションを更新しようとしています。また...これは別のスレッドから使用しようとしていないときにうまく動作します。 – ganjeii
問題が別のスレッドのみに存在する場合は、使用することをお勧めします ** Dispatcher.Invoke ** 。Dispatcher.Invoke内に配置したすべてのコードは、メインUIのwpfスレッドで実行されます。 [リンク](https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke(v = vs.110).aspx) –
Dispatcher.Invokeで回答を更新して例を追加しました。 –