private static void Save(AsyncTaskData taskData) { var saveMenuTaskData = (SaveMenuLayoutTaskData)taskData; var menuLayout = saveMenuTaskData.GetMenuLayoutToSave(); var path = saveMenuTaskData.Path; if (taskData.AcceptCancelIfRequested()) { DebugMessage("Save CANCELLED for " + path + " GENERATION " + menuLayout.SaveGeneration); return; } #if MEASURE_SAVE_PERFORMANCE var stopwatch = System.Diagnostics.Stopwatch.StartNew(); try { #endif // MEASURE_SAVE_PERFORMANCE if (taskData.AcceptCancelIfRequested()) { DebugMessage("Save CANCELLED for " + path + " GENERATION " + menuLayout.SaveGeneration); return; } DebugMessage("Save EXECUTE for " + path + " GENERATION " + menuLayout.SaveGeneration); if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(path))) { System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path)); } if (taskData.AcceptCancelIfRequested()) { DebugMessage("Save CANCELLED for " + path + " GENERATION " + menuLayout.SaveGeneration); return; } var filePath = string.Intern(path); lock (filePath) { using (var fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Create)) { var overrides = GetAttributeOverrides(); var serializer = new System.Xml.Serialization.XmlSerializer(typeof(MenuLayout), overrides, new System.Type[] { typeof(FileNode), typeof(MenuLayout), typeof(Folder), typeof(Program) }, null, null); serializer.Serialize(fileStream, menuLayout); } } #if MEASURE_SAVE_PERFORMANCE } finally { stopwatch.Stop(); DebugMessage("Save " + path + " GENERATION " + menuLayout.SaveGeneration + " took " + stopwatch.Elapsed.ToString()); if (menuLayout != null) { menuLayout.Logger.Log("Save: " + path + " GENERATION " + menuLayout.SaveGeneration + " took " + stopwatch.Elapsed.ToString()); } } #endif // MEASURE_SAVE_PERFORMANCE }