diff --git a/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/Extensions/RichTextBoxExtensions.cs b/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/Extensions/RichTextBoxExtensions.cs index 7d8d8fe..0f82c4c 100644 --- a/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/Extensions/RichTextBoxExtensions.cs +++ b/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/Extensions/RichTextBoxExtensions.cs @@ -18,6 +18,7 @@ using System; using System.Runtime.InteropServices; +using System.Threading; using System.Windows.Forms; namespace Serilog.Sinks.RichTextBoxForms.Extensions @@ -54,8 +55,25 @@ private struct Point private static extern IntPtr SendMessage(IntPtr hWnd, int wMsg, int wParam, ref Point lParam); #endif - public static void SetRtf(this RichTextBox richTextBox, string rtf, bool autoScroll) + public static void SetRtf(this RichTextBox richTextBox, string rtf, bool autoScroll, CancellationToken token) { + //Wait for richTextBox.Handle to be created + if (!richTextBox.IsHandleCreated) + { + var mre = new ManualResetEventSlim(); + EventHandler eh = (sender, args) => mre.Set(); + richTextBox.HandleCreated += eh; + try + { + if (richTextBox.IsHandleCreated) mre.Set(); + mre.Wait(token); + } + finally + { + richTextBox.HandleCreated -= eh; + } + } + if (richTextBox.InvokeRequired) { richTextBox.BeginInvoke(new Action(() => SetRtfInternal(richTextBox, rtf, autoScroll))); diff --git a/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/RichTextBoxSink.cs b/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/RichTextBoxSink.cs index 5f5ad27..78980b0 100644 --- a/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/RichTextBoxSink.cs +++ b/Serilog.Sinks.RichTextBox.WinForms.Colored/Sinks/RichTextBoxForms/RichTextBoxSink.cs @@ -133,7 +133,7 @@ private void ProcessMessages(CancellationToken token) { _renderer.Render(evt, builder); } - _richTextBox.SetRtf(builder.Rtf, _options.AutoScroll); + _richTextBox.SetRtf(builder.Rtf, _options.AutoScroll, token); lastFlush = DateTime.UtcNow; } }