@@ -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