diff --git a/src/AddIns/Misc/StartPage/Project/Src/RecentProjectsControl.xaml.cs b/src/AddIns/Misc/StartPage/Project/Src/RecentProjectsControl.xaml.cs index a0839adb80..a28bc81937 100644 --- a/src/AddIns/Misc/StartPage/Project/Src/RecentProjectsControl.xaml.cs +++ b/src/AddIns/Misc/StartPage/Project/Src/RecentProjectsControl.xaml.cs @@ -8,6 +8,7 @@ using System.ComponentModel; using System.IO; using System.Linq; using System.Threading; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; @@ -40,35 +41,31 @@ namespace ICSharpCode.StartPage set { SetValue(HeaderProperty, value); } } - - void BuildRecentProjectList() + async void BuildRecentProjectList() { // When building the project list we access the .sln files (to see if they still exist). // Because those might be stored on a slow network drive, we do this on a background thread so that // SharpDevelop startup doesn't have to wait. - ThreadPool.QueueUserWorkItem(AsyncBuildRecentProjectList, SD.FileService.RecentOpen.RecentProjects.ToArray()); - } - - void AsyncBuildRecentProjectList(object state) - { + var projectPaths = SD.FileService.RecentOpen.RecentProjects.ToArray(); List items = new List(); - foreach (string path in (string[])state) { - Core.LoggingService.Debug("RecentProjectsControl: Looking up path '" + path + "'"); - FileInfo file = new FileInfo(path); - if (file.Exists) { - items.Add( - new RecentOpenItem { - Name = Path.GetFileNameWithoutExtension(path), - LastModification = file.LastWriteTime.ToShortDateString(), - Path = path - }); - } - } + await Task.Run( + delegate { + foreach (FileName path in projectPaths) { + Core.LoggingService.Debug("RecentProjectsControl: Looking up path '" + path + "'"); + FileInfo file = new FileInfo(path); + if (file.Exists) { + items.Add( + new RecentOpenItem { + Name = Path.GetFileNameWithoutExtension(path), + LastModification = file.LastWriteTime.ToShortDateString(), + Path = path + }); + } + } + }); if (items.Count > 0) { - SD.MainThread.InvokeAsyncAndForget(new Action(delegate { - lastProjectsListView.ItemsSource = items; - lastProjectsListView.Visibility = Visibility.Visible; - })); + lastProjectsListView.ItemsSource = items; + lastProjectsListView.Visibility = Visibility.Visible; } }