Skip to content

Commit 127cf3c

Browse files
authored
Possibly fix app hang on start (#8847)
1 parent c4fa834 commit 127cf3c

File tree

2 files changed

+11
-15
lines changed

2 files changed

+11
-15
lines changed

src/Files.Uwp/Filesystem/Drives.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,12 @@
2121
using Windows.Storage.FileProperties;
2222
using Windows.UI.Core;
2323
using DriveType = Files.DataModels.NavigationControlItems.DriveType;
24-
using Files.Shared;
2524

2625
namespace Files.Filesystem
2726
{
2827
public class DrivesManager : ObservableObject
2928
{
30-
private static readonly IFolderSizeProvider folderSizeProvider = Ioc.Default.GetService<IFolderSizeProvider>();
29+
private IFolderSizeProvider FolderSizeProvider { get; } = Ioc.Default.GetService<IFolderSizeProvider>();
3130

3231
private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetService<IUserSettingsService>();
3332

@@ -106,7 +105,7 @@ private async void DeviceWatcher_EnumerationCompleted(DeviceWatcher sender, obje
106105
{
107106
System.Diagnostics.Debug.WriteLine("DeviceWatcher_EnumerationCompleted");
108107
await RefreshUI();
109-
folderSizeProvider.CleanCache();
108+
FolderSizeProvider.CleanCache();
110109
}
111110

112111
private async Task RefreshUI()
@@ -250,7 +249,7 @@ ex is UnauthorizedAccessException
250249
{
251250
return;
252251
}
253-
252+
254253
Logger.Info($"Drive added: {driveItem.Path}, {driveItem.Type}");
255254

256255
drivesList.Add(driveItem);

src/Files.Uwp/Filesystem/FolderSizeProvider.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
using System.Threading;
1111
using System.Threading.Tasks;
1212
using Windows.ApplicationModel.Core;
13-
using Windows.UI.Core;
1413
using static Files.Helpers.NativeFindStorageItemHelper;
1514

1615
namespace Files.Filesystem
@@ -34,8 +33,6 @@ internal class FolderSizeProvider : IFolderSizeProvider, IDisposable
3433
{
3534
private readonly IPreferencesSettingsService preferencesSettingsService = Ioc.Default.GetService<IPreferencesSettingsService>();
3635

37-
private readonly CoreDispatcher dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
38-
3936
private readonly IDictionary<string, long> cacheSizes = new Dictionary<string, long>();
4037

4138
public event EventHandler<FolderSizeChangedEventArgs> FolderSizeChanged;
@@ -57,14 +54,14 @@ public async void CleanCache()
5754

5855
var drives = DriveInfo.GetDrives().Select(drive => drive.Name).ToArray();
5956

60-
await dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
57+
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() =>
6158
{
6259
var oldPaths = cacheSizes.Keys.Where(path => !drives.Any(drive => path.StartsWith(drive))).ToList();
6360
foreach (var oldPath in oldPaths)
6461
{
6562
cacheSizes.Remove(oldPath);
6663
}
67-
});
64+
}, Windows.System.DispatcherQueuePriority.Low);
6865
}
6966

7067
public async void UpdateFolder(ListedItem folder, CancellationToken cancellationToken)
@@ -76,7 +73,7 @@ public async void UpdateFolder(ListedItem folder, CancellationToken cancellation
7673

7774
if (folder.PrimaryItemAttribute == Windows.Storage.StorageItemTypes.Folder && folder.ContainsFilesOrFolders)
7875
{
79-
await dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
76+
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() =>
8077
{
8178
if (cacheSizes.ContainsKey(folder.ItemPath))
8279
{
@@ -90,17 +87,17 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
9087
folder.FileSize = "ItemSizeNotCalculated".GetLocalized();
9188
RaiseSizeChanged(folder);
9289
}
93-
});
90+
}, Windows.System.DispatcherQueuePriority.Low);
9491

9592
long size = await Calculate(folder.ItemPath);
9693

97-
await dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
94+
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() =>
9895
{
9996
cacheSizes[folder.ItemPath] = size;
10097
folder.FileSizeBytes = size;
10198
folder.FileSize = size.ToSizeString();
10299
RaiseSizeChanged(folder);
103-
});
100+
}, Windows.System.DispatcherQueuePriority.Low);
104101
}
105102

106103
async Task<long> Calculate(string folderPath, int level = 0)
@@ -135,7 +132,7 @@ async Task<long> Calculate(string folderPath, int level = 0)
135132

136133
if (level <= 3)
137134
{
138-
await dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
135+
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() =>
139136
{
140137
cacheSizes[localPath] = localSize;
141138

@@ -145,7 +142,7 @@ await dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
145142
folder.FileSize = size.ToSizeString();
146143
RaiseSizeChanged(folder);
147144
};
148-
});
145+
}, Windows.System.DispatcherQueuePriority.Low);
149146
}
150147

151148
if (cancellationToken.IsCancellationRequested)

0 commit comments

Comments
 (0)