J'essaye d'écrire à mon app.config à partir d'un fil en utilisant Task.Run (() => méthode) mais je reçois une erreur d'E/S sur la ligne 2 dans la méthode ci-dessousErreur d'E/S lors de l'accès à app.config à partir du thread
« System.IO.IOException:« le processus ne peut pas accéder au fichier « WpfApplication1.exe.Config » parce qu'il est utilisé par un autre processus. »
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 Supposons que cela se produise car le thread principal de l'application lit le fichier et empêche le thread d'y accéder. Y a-t-il une manière recommandée de faire ceci?
Oui J'utilise configurationManager de mettre à jour ma section AppSettings mais comme vous pouvez le voir par mon nom de méthode que je suis essayer de mettre à jour une section personnalisée en dehors d'appSettings. Aussi ... cela fonctionne bien quand je n'essaie pas de l'utiliser à partir d'un fil différent. – ganjeii
Si le problème existe seulement sur le fil différent je peux suggérer utiliser ** Dispatcher.Invoke ** .Tout le code que vous mettez à l'intérieur de Dispatcher.Invoke s'exécutera dans le fil principal wpf UI. [link] (https://msdn.microsoft.com/fr-fr/library/system.windows.threading.dispatcher.invoke (v = vs.110) .aspx) –
J'ai mis à jour la réponse et ajouter un exemple avec Dispatcher.Invoke –