private void OnBackgroundProcessorWorkCompleted(object s, RunWorkerCompletedEventArgs args) { if (m_passes.Count == 0) { foreach (var newRefTextRow in m_dataGridRefTexts.Rows.OfType <DataGridViewRow>().Where(r => s_createActions.Contains((string)r.Cells[colAction.Index].Value) && !r.Cells[colHeSaidText.Index].ReadOnly && !r.Cells[colIsoCode.Index].ReadOnly)) { // Generate a new metadata file with the above info var languageName = (string)newRefTextRow.Cells[colName.Index].Value; var folder = Data.GetLanguageInfo(languageName).OutputFolder; var projectPath = Path.Combine(folder, languageName + Constants.kProjectFileExtension); if (File.Exists(projectPath)) { HandleMessageRaised($"File {projectPath} already exists! Skipping. Please verify contents.", true); } else { var metadata = XmlSerializationHelper.DeserializeFromString <GlyssenDblTextMetadata>(Resources.refTextMetadata); metadata.Language = new GlyssenDblMetadataLanguage { Name = languageName, HeSaidText = newRefTextRow.Cells[colHeSaidText.Index].Value as string, Iso = newRefTextRow.Cells[colIsoCode.Index].Value as string }; metadata.AvailableBooks = new List <Book>(); ProjectUtilities.ForEachBookFileInProject(folder, (bookId, fileName) => metadata.AvailableBooks.Add(new Book { Code = bookId, IncludeInScript = true })); metadata.LastModified = DateTime.Now; Exception error; XmlSerializationHelper.SerializeToFile(projectPath, metadata, out error); if (error != null) { HandleMessageRaised(error.Message, true); } } } m_btnOk.Enabled = m_btnSkipAll.Enabled = true; } else { BackgroundProcessor.RunWorkerAsync(); } }