private void SaveFile(string filename, int filterIndex = 0) { var extension = Path.GetExtension(filename).ToLower(); var handler = filterIndex > 0 ? _saveHandler.GetHandlerForFilterIndex(filterIndex) : _saveHandler.GetHandlerForExtension(extension); if (handler == null) { return; } var settingsForm = handler.GetSettingsForm(); if (settingsForm != null) { settingsForm.Icon = this.Icon; settingsForm.StartPosition = FormStartPosition.CenterParent; settingsForm.FormBorderStyle = FormBorderStyle.FixedToolWindow; settingsForm.Text = "Save as..."; var closeDialogSuccess = settingsForm.ShowDialog(this) == DialogResult.OK; if (!closeDialogSuccess) { return; } } Thread loadDataThread = new Thread(delegate() { handler.Save(filename, m_playerData); if (InvokeRequired) { BeginInvoke(new Action(() => { m_loadingForm.Close(); })); } }); loadDataThread.Start(); m_loadingForm.DisplayedMessage = "Saving pattern..."; m_loadingForm.ShowDialog(this); }