private void ForceSaveBehavior(BehaviorSave behavior) { if (behavior.IsSourceFileMissing) { MessageBox.Show("Cannot save " + behavior + " because its source file is missing"); } else { bool succeeded = true; UndoManager.Self.RecordUndo(); bool doesProjectNeedToSave = false; bool shouldSave = ProjectManager.Self.AskUserForProjectNameIfNecessary(out doesProjectNeedToSave); if (doesProjectNeedToSave) { ProjectManager.Self.SaveProject(); } if (shouldSave) { //PluginManager.Self.BeforeBehaviorSave(behavior); string fileName = behavior.GetFullPathXmlFile(); FileWatchLogic.Self.IgnoreNextChangeOn(fileName); // if it's readonly, let's warn the user bool isReadOnly = ProjectManager.IsFileReadOnly(fileName); if (isReadOnly) { ProjectManager.ShowReadOnlyDialog(fileName); } else { const int maxNumberOfTries = 5; const int msBetweenSaves = 100; int numberOfTimesTried = 0; succeeded = false; Exception exception = null; while (numberOfTimesTried < maxNumberOfTries) { try { FileManager.XmlSerialize(behavior.GetType(), behavior, fileName); succeeded = true; break; } catch (Exception e) { exception = e; System.Threading.Thread.Sleep(msBetweenSaves); numberOfTimesTried++; } } if (succeeded == false) { MessageBox.Show("Unknown error trying to save the file\n\n" + fileName + "\n\n" + exception.ToString()); succeeded = false; } } if (succeeded) { OutputManager.Self.AddOutput("Saved " + behavior + " to " + fileName); //PluginManager.Self.AfterBehaviorSave(behavior); } } //PluginManager.Self.Export(elementSave); } }