public MainWindow() { InitializeComponent(); Dest = new RejectablePrperty <string>(); History = new ObservableCollection <string>(); Move = new RejectablePrperty <bool>(); Move.Value = true; RectColor = new RejectablePrperty <Brush>(); RectColor.Value = Brushes.White; TopMost = new RejectablePrperty <bool>(); TopMost.Value = false; TotalFiles = new RejectablePrperty <int>(); Progress = new RejectablePrperty <int>(); DataContext = this; spool = new UltraSuperSpool(); spool.Omit(); }
private void BtnStart_Click(object sender, RoutedEventArgs e) { if (running) { tokenSource.Cancel(); btnStart.IsEnabled = false; return; } btnStart.Content = "Stop"; btnStart.IsEnabled = false; Prepare(); running = true; if (tokenSource == null) { tokenSource = new CancellationTokenSource(); } var token = tokenSource.Token; spool.Omit(); Task.Factory.StartNew(() => { Dispatcher.Invoke(() => btnStart.IsEnabled = true); long n = 0; while (true) { if (token.IsCancellationRequested) { break; } if (MaxTask <= 0) { n++; var f = System.IO.Path.Combine(rootDir.FullName, $"{n:D16}.{fileExt}"); Dispatcher.Invoke(() => lblProgress.Content = $"{f} Free:{Nira.GetDriveFreeSpace(rootDir.FullName)}"); if (File.Exists(f)) { continue; } WriteFile(f); } else { if (spool.TaskCount >= MaxTask) { Thread.Sleep(100); continue; } var dfs = Nira.GetDriveFreeSpace(rootDir.FullName); if (dfs < 10) { break; } n++; var f = System.IO.Path.Combine(rootDir.FullName, $"{n:D16}.{fileExt}"); Dispatcher.Invoke(() => lblProgress.Content = $"{f} Free:{dfs}"); if (File.Exists(f)) { continue; } WriteFileAsync(f); } Thread.Sleep(1); } }, token).ContinueWith(t => { tokenSource.Dispose(); tokenSource = null; running = false; spool.Stop(); spool.Wait(); if (tmpDir.Exists) { tmpDir.Delete(); } Dispatcher.Invoke(() => { btnStart.IsEnabled = true; btnStart.Content = "Start"; }); }); }