Example #1
0
        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
        }