Example #1
0
        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
            });
        }
Example #2
0
 public static void OnProcessingEnd(object sender, ProcessingEventArgs e)
 {
     ProcessingEnd?.Invoke(sender, e);
 }