private void ThreadProc(object state) { while (!cancellation.IsCancellationRequested) { MultiThreadedFileOperationState targets; while (!FileQueue.TryDequeue(out targets)) { Thread.Sleep(500); } var source = targets.SourceFile; var target = targets.TargetFile; try { OnOperationStarted(this, new FileOperationStartedEventArgs(source.FullName)); PreOperationHandlers(source, target); ProcessFile(source, target); target.Refresh(); PostOperationHandlers(source, target); OnOperationCompleted(this, new FileOperationCompletedEventArgs(target)); } catch (OperationCanceledException) { } catch (Exception e) { OnError(this, new FileOperationErrorEventArgs(e)); } } }
private void ParseFiles() { // Если задание по поиску файлов еще работает, то будем парсить файлы while (true) { if (_flagFileSearchEnd && _fileQueue.Count() == 0) { break; } if (_fileQueue.Count() > 0) { FileInfo fileInfo; _fileQueue.TryDequeue(out fileInfo); if (fileInfo != null) { // Получаем новый тип файла, если это файл модуля, то он // будет уже со списком отпарсенных функций var fileType = FileTypeFabric.NewFileType(fileInfo); _fileTypeQueue.Enqueue(fileType); } } else { Task.Delay(50); } } }