public void LoadPowerpoint(string file) { var powerpointThread = new Thread(() => { var ppt = new ApplicationClass().Presentations.Open(file, TRUE, FALSE, FALSE); try { var provider = (CouchConversationDetailsProvider)ProviderMonitor.GetProvider(typeof(IConversationDetailsProvider)); var xml = new XElement("presentation"); xml.Add(new XAttribute("name", ppt.Name)); if (provider.DetailsOf(ppt.Name).Author != "Happenstance") { System.Windows.MessageBox.Show("This conversation already exists, and might have private content in it. Please rename your powerpoint file to retry the import."); return; } parsedTitle = ppt.Name.Replace(".pptx", ""); Commands.PowerPointProgress.Execute("Starting to parse powerpoint file"); foreach (var slide in ppt.Slides) { importSlide(xml, (Microsoft.Office.Interop.PowerPoint.Slide) slide); } Commands.PowerPointProgress.Execute( "Finished parsing powerpoint, Beginning data upload"); var uploadedXML = uploadXmlUrls(xml); Commands.PowerPointProgress.Execute( "Powerpoint data uploaded to server, Beginning distribution"); sendDocument(uploadedXML); Commands.PowerPointProgress.Equals( "Powerpoint distribution finished"); } finally { ppt.Close(); Commands.PowerPointLoadFinished.Execute(null); } }); powerpointThread.SetApartmentState(ApartmentState.STA); powerpointThread.Start(); }