//Speichert die XML in den Ordner des Servers //Überwacht zusätzlich den status der xml, ob diese Abgeschlossen sind oder nicht public void DateiSchreiben(XmlDocument xmlDocument) { if (xmlDocument != null) { _xml = xmlDocument; _clientName = _xml.DocumentElement.Attributes[0].Value; if (File.Exists(_clientName + "_NC.xml")) { if (CheckForRoot(_xml) != true) { Thread appendingThread = new Thread(() => AppendXml(_xml, 1)); appendingThread.Start(); } else if (CheckForRoot(_xml)) { if (File.Exists(_clientName + ".xml")) { Thread savinThread = new Thread(() => AppendXml(_xml, 2)); savinThread.Start(); } else { Thread savinThread = new Thread(() => AppendXml(_xml, 3)); savinThread.Start(); } } } else if (File.Exists(_clientName + "_NC.xml") == false) { if (!CheckForRoot(_xml)) { string dateiname = _clientName + "_1NC.xml"; object thisThreadSyncObject = new object(); thisThreadSyncObject = _keyDict.GetOrAdd(dateiname, thisThreadSyncObject); if (Monitor.TryEnter(thisThreadSyncObject)) { try { Console.WriteLine("versuche:Speichere nicht fertige xml erstmalig"); Thread savinThread = new Thread(() => SaveXml(_xml, _clientName + "_NC.xml", 1)); savinThread.Start(); } finally { Monitor.Exit(thisThreadSyncObject); } } else { Thread.Sleep(30); DateiSchreiben(xmlDocument); } } else { Console.WriteLine("Achtung das root element ist als erstes angekommen"); Thread savinThread = new Thread(() => SaveXml(_xml, _clientName + ".xml", 1)); savinThread.Start(); } } } else { Console.WriteLine("Fehler:XmlDocument entspricht null"); } }