public void OpenFile(string fileName) { if (!System.IO.File.Exists(fileName)) { return; } view.Clear(); ShowStatus("Loading..."); Mouse.OverrideCursor = Cursors.Wait; // Load on a background thread so we can keep the UI in sync Task.Factory.StartNew(() => { try { xstFile = new XstFile(view, fileName); xstFile.ReadFolderTree(); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Error reading xst file"); } }) // When loading completes, update the UI using the UI thread .ContinueWith((task) => { Application.Current.Dispatcher.Invoke(new Action(() => { ShowStatus(null); Mouse.OverrideCursor = null; Title = "Xst Reader - " + System.IO.Path.GetFileName(fileName); })); }); }
public void OpenFile(string fileName) { if (!System.IO.File.Exists(fileName)) { return; } view.Clear(); ShowStatus("Loading..."); Mouse.OverrideCursor = Cursors.Wait; // Load on a background thread so we can keep the UI in sync Task.Factory.StartNew(() => { try { xstFile = new XstFile(fileName); var root = xstFile.ReadFolderTree(); // // I refactorized this part: // // iterator with view.RootFolderViews.Add -> moved to view.UpdateFolderViews(root) // // We may be called on a background thread, so we need to dispatch this to the UI thread Application.Current.Dispatcher.Invoke(new Action(() => view.UpdateFolderViews(root))); //foreach (var f in root.Folders) //{ // // We may be called on a background thread, so we need to dispatch this to the UI thread // Application.Current.Dispatcher.Invoke(new Action(() => // { // view.RootFolderViews.Add(new FolderView(f)); // })); //} } catch (System.Exception ex) { MessageBox.Show(ex.ToString(), "Error reading xst file"); } }) // When loading completes, update the UI using the UI thread .ContinueWith((task) => { Application.Current.Dispatcher.Invoke(new Action(() => { ShowStatus(null); Mouse.OverrideCursor = null; Title = "Xst Reader - " + System.IO.Path.GetFileName(fileName); })); }); }
private void btnOpen_Click(object sender, RoutedEventArgs e) { // Ask for a .ost or .pst file to open System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog(); dialog.Filter = "xst files (*.ost;*.pst)|*.ost;*.pst|All files (*.*)|*.*"; dialog.FilterIndex = 1; dialog.InitialDirectory = Properties.Settings.Default.LastFolder; if (dialog.InitialDirectory == "") { dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); } dialog.RestoreDirectory = true; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Properties.Settings.Default.LastFolder = System.IO.Path.GetDirectoryName(dialog.FileName); Properties.Settings.Default.Save(); view.Clear(); txtStatus.Text = "Loading..."; Mouse.OverrideCursor = Cursors.Wait; // Load on a background thread so we can keep the UI in sync Task.Factory.StartNew(() => { try { xstFile = new XstFile(view, dialog.FileName); xstFile.ReadFolderTree(); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Error reading xst file"); } }) // When loading completes, update the UI using the UI thread .ContinueWith((task) => { Application.Current.Dispatcher.Invoke(new Action(() => { txtStatus.Text = ""; Mouse.OverrideCursor = null; Title = "Xst Reader - " + System.IO.Path.GetFileName(dialog.FileName); })); }); } }