Skip to content

Commit fb5b424

Browse files
committed
Replace tasks with background thread and change waiting (#1).
1 parent 31565a6 commit fb5b424

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed

DiskInfoToolkit/StorageManager.cs

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,14 @@ static StorageManager()
3939
_WndProc = WindowProc;
4040

4141
//Start device changed listener
42-
_DevicesChangedTask = new Task(DevicesChangedListener);
43-
_DevicesChangedTask.Start();
42+
_DevicesChangedThread = new Thread(DevicesChangedListener);
43+
_DevicesChangedThread.IsBackground = true;
44+
_DevicesChangedThread.Start();
4445

4546
//Start message loop
46-
_MessageLoopTask = new Task(MessageLoop);
47-
_MessageLoopTask.Start();
47+
_MessageLoopThread = new Thread(MessageLoop);
48+
_MessageLoopThread.IsBackground = true;
49+
_MessageLoopThread.Start();
4850
}
4951

5052
#endregion
@@ -54,15 +56,15 @@ static StorageManager()
5456
static IntPtr _HiddenWindowHwnd;
5557
static User32.WndProc _WndProc;
5658

57-
static Task _MessageLoopTask;
58-
static Task _DevicesChangedTask;
59+
static Thread _MessageLoopThread;
60+
static Thread _DevicesChangedThread;
61+
62+
static readonly AutoResetEvent _DevicesChangedEvent = new(false);
5963

6064
static ConcurrentQueue<DeviceChangedModel> _ChangedStorages = new();
6165

6266
static object _StorageLock = new();
6367

64-
const int DevicesChangedDelayMS = 25;
65-
6668
#endregion
6769

6870
#region Properties
@@ -211,6 +213,7 @@ static IntPtr WindowProc(IntPtr hWnd, uint msg, ulong wParam, IntPtr lParam)
211213
{
212214
StorageChangeIdentifier = StorageChangeIdentifierInternal.DevicesChanged,
213215
});
216+
_DevicesChangedEvent.Set();
214217
break;
215218
//Normal event when drive was added or removed
216219
case User32.DBT_DEVICEARRIVAL:
@@ -240,6 +243,7 @@ static IntPtr WindowProc(IntPtr hWnd, uint msg, ulong wParam, IntPtr lParam)
240243
DriveLetter = driveLetter,
241244
StorageChangeIdentifier = sci,
242245
});
246+
_DevicesChangedEvent.Set();
243247
}
244248
else
245249
{
@@ -257,29 +261,24 @@ static void DevicesChangedListener()
257261
while (true)
258262
{
259263
//Wait for device changes
260-
if (!_ChangedStorages.IsEmpty)
264+
_DevicesChangedEvent.WaitOne();
265+
266+
while (_ChangedStorages.TryDequeue(out var item))
261267
{
262-
if (_ChangedStorages.TryDequeue(out var item))
268+
//Handle device change
269+
switch (item.StorageChangeIdentifier)
263270
{
264-
//Handle device change
265-
switch (item.StorageChangeIdentifier)
266-
{
267-
case StorageChangeIdentifierInternal.Added:
268-
HandleDriveWithDriveLetterAdded(item);
269-
break;
270-
case StorageChangeIdentifierInternal.Removed:
271-
HandleDriveWithDriveLetterRemoved(item);
272-
break;
273-
case StorageChangeIdentifierInternal.DevicesChanged:
274-
HandleUnpartitionedDrive(item);
275-
break;
276-
}
271+
case StorageChangeIdentifierInternal.Added:
272+
HandleDriveWithDriveLetterAdded(item);
273+
break;
274+
case StorageChangeIdentifierInternal.Removed:
275+
HandleDriveWithDriveLetterRemoved(item);
276+
break;
277+
case StorageChangeIdentifierInternal.DevicesChanged:
278+
HandleUnpartitionedDrive(item);
279+
break;
277280
}
278281
}
279-
else
280-
{
281-
Thread.Sleep(DevicesChangedDelayMS);
282-
}
283282
}
284283
}
285284

0 commit comments

Comments
 (0)