Skip to content

Commit fb53d73

Browse files
authored
Defer adding drives to UI until MainView is activated (#806)
1 parent aa5e2a1 commit fb53d73

File tree

1 file changed

+49
-12
lines changed

1 file changed

+49
-12
lines changed

Files/Filesystem/Drives.cs

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,63 @@ public DrivesManager()
5151
});
5252
}
5353

54-
private void DeviceWatcher_EnumerationCompleted(DeviceWatcher sender, object args)
54+
private async void DeviceWatcher_EnumerationCompleted(DeviceWatcher sender, object args)
5555
{
56-
if (App.sideBarItems.FirstOrDefault(x => x is HeaderTextItem && x.Text == ResourceController.GetTranslation("SidebarDrives")) == null)
56+
try
5757
{
58-
App.sideBarItems.Add(new HeaderTextItem() { Text = ResourceController.GetTranslation("SidebarDrives") });
58+
await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
59+
{
60+
if (App.sideBarItems.FirstOrDefault(x => x is HeaderTextItem && x.Text == ResourceController.GetTranslation("SidebarDrives")) == null)
61+
{
62+
App.sideBarItems.Add(new HeaderTextItem() { Text = ResourceController.GetTranslation("SidebarDrives") });
63+
}
64+
foreach (DriveItem drive in Drives)
65+
{
66+
if (!App.sideBarItems.Contains(drive))
67+
{
68+
App.sideBarItems.Add(drive);
69+
}
70+
}
71+
foreach (INavigationControlItem item in App.sideBarItems.ToList())
72+
{
73+
if (item is DriveItem && !Drives.Contains(item))
74+
{
75+
App.sideBarItems.Remove(item);
76+
}
77+
}
78+
});
5979
}
60-
foreach (DriveItem drive in Drives)
80+
catch (Exception) // UI Thread not ready yet, so we defer the pervious operation until it is.
6181
{
62-
if (!App.sideBarItems.Contains(drive))
63-
{
64-
App.sideBarItems.Add(drive);
65-
}
82+
// Defer because UI-thread is not ready yet (and DriveItem requires it?)
83+
CoreApplication.MainView.Activated += MainView_Activated;
6684
}
67-
foreach (INavigationControlItem item in App.sideBarItems.ToList())
85+
}
86+
87+
private async void MainView_Activated(CoreApplicationView sender, Windows.ApplicationModel.Activation.IActivatedEventArgs args)
88+
{
89+
await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
6890
{
69-
if (item is DriveItem && !Drives.Contains(item))
91+
if (App.sideBarItems.FirstOrDefault(x => x is HeaderTextItem && x.Text == ResourceController.GetTranslation("SidebarDrives")) == null)
7092
{
71-
App.sideBarItems.Remove(item);
93+
App.sideBarItems.Add(new HeaderTextItem() { Text = ResourceController.GetTranslation("SidebarDrives") });
7294
}
73-
}
95+
foreach (DriveItem drive in Drives)
96+
{
97+
if (!App.sideBarItems.Contains(drive))
98+
{
99+
App.sideBarItems.Add(drive);
100+
}
101+
}
102+
foreach (INavigationControlItem item in App.sideBarItems.ToList())
103+
{
104+
if (item is DriveItem && !Drives.Contains(item))
105+
{
106+
App.sideBarItems.Remove(item);
107+
}
108+
}
109+
});
110+
CoreApplication.MainView.Activated -= MainView_Activated;
74111
}
75112

76113
private async void DeviceAdded(DeviceWatcher sender, DeviceInformation args)

0 commit comments

Comments
 (0)