private void treeFolders_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { try { FolderView fv = (FolderView)e.NewValue; view.SelectedFolder = fv; if (fv != null) { view.SetMessage(null); ShowMessage(null); fv.MessageViews.Clear(); ShowStatus("Reading messages..."); Mouse.OverrideCursor = Cursors.Wait; // Read messages on a background thread so we can keep the UI in sync Task.Factory.StartNew(() => { try { xstFile.ReadMessages(fv.Folder); // We may be called on a background thread, so we need to dispatch this to the UI thread Application.Current.Dispatcher.Invoke(new Action(() => fv.UpdateMessageViews())); } catch (System.Exception ex) { MessageBox.Show(ex.ToString(), "Error reading messages"); } }) // When loading completes, update the UI using the UI thread .ContinueWith((task) => { Application.Current.Dispatcher.Invoke(new Action(() => { ShowStatus(null); Mouse.OverrideCursor = null; })); }); // If there is no sort in effect, sort by date in descending order SortMessages("Date", ListSortDirection.Descending, ifNoneAlready: true); } } catch (Exception ex) { MessageBox.Show(ex.ToString(), "Unexpected error reading messages"); } }
private void treeFolders_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { Folder f = (Folder)e.NewValue; view.SelectedFolder = f; if (f != null) { view.SetMessage(null); ShowMessage(null); f.Messages.Clear(); ShowStatus("Reading messages..."); Mouse.OverrideCursor = Cursors.Wait; // Read messages on a background thread so we can keep the UI in sync Task.Factory.StartNew(() => { try { xstFile.ReadMessages(f); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "Error reading messages"); } }) // When loading completes, update the UI using the UI thread .ContinueWith((task) => { Application.Current.Dispatcher.Invoke(new Action(() => { ShowStatus(null); Mouse.OverrideCursor = null; })); }); // If there is no sort in effect, sort by date in descending order if (listViewSortCol == null) { string tag = "Date"; listViewSortCol = ((GridView)listMessages.View).Columns.Select(c => (GridViewColumnHeader)c.Header).Where(h => h.Tag.ToString() == tag).First(); listViewSortAdorner = new SortAdorner(listViewSortCol, ListSortDirection.Descending); AdornerLayer.GetAdornerLayer(listViewSortCol).Add(listViewSortAdorner); listMessages.Items.SortDescriptions.Add(new SortDescription(tag, ListSortDirection.Descending)); } } }