private void CheckAbilityToUseParallelExtensions() { if (IsUseParallelExtensionsCheckBox.Checked) { if (!CParallelExtensionsProvider.IsCanUseParallelExtensions()) { MessageBox.Show(ICloneLocalization.CMNMESS_CannotUseParallelExtensions, CWindowNamer.BuildWindowName(ICloneLocalization.CSW_WindowHeader), MessageBoxButtons.OK, MessageBoxIcon.Warning); } } }
/// <summary> /// Считать файлы с жёсткого диска и загрузить в память /// </summary> /// <param name="FilesToLoad"></param> protected override void LoadFilesToMemory(List <string> FilesToLoad) { if (LoadFilesOptions.IsUseParallelExtensions && CParallelExtensionsProvider.IsCanUseParallelExtensions()) { ParallelOptions po = new ParallelOptions(); po.CancellationToken = m_CancellationToken.Token; po.MaxDegreeOfParallelism = Environment.ProcessorCount; try { Parallel.ForEach(FilesToLoad, po, (any_file_name) => { if (!GetCancelOperationFlag()) { try { LoadOneFile(any_file_name); OnLoadFilesProgress(); } catch { // пока что так. потом нужно будет сделать журнал и записать туда ошибку. // и потом продолжить чтение файлов throw; } } else { po.CancellationToken.ThrowIfCancellationRequested(); } }); } catch (OperationCanceledException) { } } else { foreach (string any_file_name in FilesToLoad) { if (!GetCancelOperationFlag()) { try { LoadOneFile(any_file_name); OnLoadFilesProgress(); } catch { // пока что так. потом нужно будет сделать журнал и записать туда ошибку. // и потом продолжить чтение файлов throw; } } else { break; } } } }