Пример #1
0
 private void DriveMonitorThread()
 {
     while (true)
     {
         var invalidDrive = Path.GetPathRoot(Application.StartupPath);
         var allDrives    = DriveInfo.GetDrives().Where(d => d.IsReady && d.DriveType.Equals(DriveType.Removable) && !d.Name.Equals(invalidDrive, StringComparison.InvariantCultureIgnoreCase));
         var formatting   = ThreadSafeWinControlHelper.GetDriveInfoProgress(flowLayoutPanel1, DriveInfoProgressStatus.Formatting).Select(c => c.Volume);
         var addDrives    = allDrives.Where(d => !formatting.Contains(d.Name)).Except(_drives, DriveInfoComparer);
         foreach (var drive in addDrives)
         {
             _drives.Add(drive);
         }
         Thread.Sleep(300);
     }
 }
Пример #2
0
        private void DetectDriveDisconnectThread(DriveInfo drive)
        {
            var control = ThreadSafeWinControlHelper.GetDriveInfoProgress(flowLayoutPanel1, drive.Name);

            while (drive.IsReady || control.Status == DriveInfoProgressStatus.Formatting)
            {
                if (control == null)
                {
                    control = ThreadSafeWinControlHelper.GetDriveInfoProgress(flowLayoutPanel1, drive.Name);
                }
                // Waiting for disconnect.
                Thread.Sleep(300);
            }
            lock (_drives)
            {
                _drives.Remove(drive);
            }
        }
Пример #3
0
        private void _drives_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            var oldItems = e.OldItems != null?e.OldItems.Cast <DriveInfo>() : Enumerable.Empty <DriveInfo>();

            foreach (var rmvItem in oldItems)
            {
                ThreadSafeWinControlHelper.RemoveDriveInfoWrapper(flowLayoutPanel1, rmvItem.Name);
            }
            var newItems = e.NewItems != null?e.NewItems.Cast <DriveInfo>() : Enumerable.Empty <DriveInfo>();

            foreach (var addItem in newItems)
            {
                var t = new Thread((ThreadStart) delegate { DetectDriveDisconnectThread(addItem); })
                {
                    Name         = string.Format("ThumbDriveDuplicatorDisconnect;{0}", addItem.RootDirectory.FullName),
                    IsBackground = true
                };
                t.Start();
                var driveWrapper = new DriveInfoData(addItem);
                ThreadSafeWinControlHelper.AddDriveInfoWrapper(this, flowLayoutPanel1, driveWrapper);
            }
        }
 private void SetStatus(DriveInfoProgressStatus status, string formatString = "{0}")
 {
     Status = status;
     ThreadSafeWinControlHelper.SetText(label2, string.Format(formatString, status));
 }
 private void _driveInfoWrapper_ProgressChanged(object sender, EventArgs e)
 {
     Progress = _driveInfoData.Progress;
     ThreadSafeWinControlHelper.SetProgress(progressBar1, (int)(Progress * 100));
 }