private async void OnStartProcessing(object sender, EventArgs e) { var logFile = await OpenLogStream(txtLogDest.Text); var beginTime = DateTime.Now; ProcessingBegin?.Invoke(this, null); CancellationInvoker = new CancellationTokenSource(); var guiThread = Thread.CurrentThread.ManagedThreadId; int processingTaskThread = -1; string[] filesToProcess = new string[imageList.Images.Keys.Count]; imageList.Images.Keys.CopyTo(filesToProcess, 0); await Task.Run(() => { processingTaskThread = Thread.CurrentThread.ManagedThreadId; try { var token = CancellationInvoker.Token; if (cbParallel.Checked) { parallelProcessor.ProcessImagesInParallel(filesToProcess, (int)numNewPixelSize.Value, MAX_PARALLELISATION_LEVEL, token); } else { parallelProcessor.ProcessImages(filesToProcess, (int)numNewPixelSize.Value, token); } } catch (OperationCanceledException ex) { // just interrupt processing //ProcessingCancel?.Invoke(this, null); } }); CancellationInvoker.Dispose(); var logStream = (logFile != null ? new StreamWriter(logFile) : null); var logEntries = parallelProcessor.WriteLog(logStream); logStream?.WriteLine($"Main GUI Thread: {guiThread}\tMain Task Thread: {processingTaskThread}"); logStream?.Flush(); logFile.Dispose(); var deltaTime = DateTime.Now - beginTime; ProcessingEnd?.Invoke(this, new ProcessingEndEventArgs { DeltaTime = deltaTime, RequestedFilesCount = filesToProcess.Length, ProcessedFilesCount = logEntries }); }
public static void OnProcessingEnd(object sender, ProcessingEventArgs e) { ProcessingEnd?.Invoke(sender, e); }