From ee62d9ae8de52929d5513cade4ac250e1b9a6c4a Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 24 May 2022 07:36:17 -0600 Subject: [PATCH] Attempt to fix app hang on LogMe event --- Source/LibationWinForms/ProcessQueue/LogMe.cs | 30 +++++++++++++------ .../ProcessQueue/ProcessQueueControl.cs | 2 +- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Source/LibationWinForms/ProcessQueue/LogMe.cs b/Source/LibationWinForms/ProcessQueue/LogMe.cs index b6d61f69..06b84400 100644 --- a/Source/LibationWinForms/ProcessQueue/LogMe.cs +++ b/Source/LibationWinForms/ProcessQueue/LogMe.cs @@ -19,7 +19,7 @@ namespace LibationWinForms.ProcessQueue LogErrorString += (_, text) => Serilog.Log.Logger.Error(text); LogError += (_, tuple) => Serilog.Log.Logger.Error(tuple.Item1, tuple.Item2 ?? "Automated backup: error"); } - + private static ILogForm LogForm; public static LogMe RegisterForm(T form) where T : ILogForm { var logMe = new LogMe(); @@ -27,19 +27,31 @@ namespace LibationWinForms.ProcessQueue if (form is null) return logMe; - logMe.LogInfo += (_, text) => form?.WriteLine(text); + LogForm = form; - logMe.LogErrorString += (_, text) => form?.WriteLine(text); - - logMe.LogError += (_, tuple) => - { - form?.WriteLine(tuple.Item2 ?? "Automated backup: error"); - form?.WriteLine("ERROR: " + tuple.Item1.Message); - }; + logMe.LogInfo += LogMe_LogInfo; + logMe.LogErrorString += LogMe_LogErrorString; + logMe.LogError += LogMe_LogError; return logMe; } + private static async void LogMe_LogError(object sender, (Exception, string) tuple) + { + await Task.Run(() => LogForm?.WriteLine(tuple.Item2 ?? "Automated backup: error")); + await Task.Run(() => LogForm?.WriteLine("ERROR: " + tuple.Item1.Message)); + } + + private static async void LogMe_LogErrorString(object sender, string text) + { + await Task.Run(() => LogForm?.WriteLine(text)); + } + + private static async void LogMe_LogInfo(object sender, string text) + { + await Task.Run(() => LogForm?.WriteLine(text)); + } + public void Info(string text) => LogInfo?.Invoke(this, text); public void Error(string text) => LogErrorString?.Invoke(this, text); public void Error(Exception ex, string text = null) => LogError?.Invoke(this, (ex, text)); diff --git a/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs b/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs index 9acf1eb4..f1830f51 100644 --- a/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs +++ b/Source/LibationWinForms/ProcessQueue/ProcessQueueControl.cs @@ -169,7 +169,7 @@ namespace LibationWinForms.ProcessQueue if (IsDisposed) return; var timeStamp = DateTime.Now; - logDGV.Rows.Add(timeStamp, text.Trim()); + Invoke(() => logDGV.Rows.Add(timeStamp, text.Trim())); } #region Control event handlers