From f483a2dc2f611a0160bd7ca305bf5a07e27ba84b Mon Sep 17 00:00:00 2001 From: David Sparer Date: Sun, 29 Jul 2018 12:02:41 -0500 Subject: [PATCH] replaced Timer implementation with Task async call fixes #1052 --- .../WriterDecorators/MessageFocusDecorator.cs | 51 +++++++------------ 1 file changed, 18 insertions(+), 33 deletions(-) diff --git a/mRemoteV1/Messages/WriterDecorators/MessageFocusDecorator.cs b/mRemoteV1/Messages/WriterDecorators/MessageFocusDecorator.cs index 1f26c713c..3e96ba4a6 100644 --- a/mRemoteV1/Messages/WriterDecorators/MessageFocusDecorator.cs +++ b/mRemoteV1/Messages/WriterDecorators/MessageFocusDecorator.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using System.Windows.Forms; using mRemoteNG.Messages.MessageWriters; using mRemoteNG.UI.Forms; @@ -12,7 +13,6 @@ namespace mRemoteNG.Messages.WriterDecorators private readonly IMessageTypeFilteringOptions _filter; private readonly IMessageWriter _decoratedWriter; private readonly ErrorAndInfoWindow _messageWindow; - private Timer _ecTimer; private readonly FrmMain _frmMain = FrmMain.Default; public MessageFocusDecorator(ErrorAndInfoWindow messageWindow, IMessageTypeFilteringOptions filter, IMessageWriter decoratedWriter) @@ -27,14 +27,14 @@ namespace mRemoteNG.Messages.WriterDecorators _filter = filter; _messageWindow = messageWindow; _decoratedWriter = decoratedWriter; - CreateTimer(); } - public void Write(IMessage message) + public async void Write(IMessage message) { - if (WeShouldFocusNotificationPanel(message)) - BeginSwitchToPanel(); _decoratedWriter.Write(message); + + if (WeShouldFocusNotificationPanel(message)) + await SwitchToMessageAsync(); } private bool WeShouldFocusNotificationPanel(IMessage message) @@ -43,7 +43,8 @@ namespace mRemoteNG.Messages.WriterDecorators switch (message.Class) { case MessageClass.InformationMsg: - if (_filter.AllowInfoMessages) return true; + if (_filter.AllowInfoMessages) + return true; break; case MessageClass.WarningMsg: if (_filter.AllowWarningMessages) return true; @@ -55,43 +56,27 @@ namespace mRemoteNG.Messages.WriterDecorators return false; } - private void CreateTimer() + private async Task SwitchToMessageAsync() { - _ecTimer = new Timer - { - Enabled = false, - Interval = 300 - }; - _ecTimer.Tick += SwitchTimerTick; - } - - private void BeginSwitchToPanel() - { - _ecTimer.Enabled = true; - } - - private void SwitchTimerTick(object sender, EventArgs e) - { - SwitchToMessage(); - _ecTimer.Enabled = false; + await Task + .Delay(TimeSpan.FromMilliseconds(300)) + .ContinueWith(task => SwitchToMessage()); } private void SwitchToMessage() { + if (_messageWindow.InvokeRequired) + { + _frmMain.Invoke((MethodInvoker)SwitchToMessage); + return; + } + _messageWindow.PreviousActiveForm = (DockContent)_frmMain.pnlDock.ActiveContent; - ShowMcForm(); + _messageWindow.Show(_frmMain.pnlDock); _messageWindow.lvErrorCollector.Focus(); _messageWindow.lvErrorCollector.SelectedItems.Clear(); _messageWindow.lvErrorCollector.Items[0].Selected = true; _messageWindow.lvErrorCollector.FocusedItem = _messageWindow.lvErrorCollector.Items[0]; } - - private void ShowMcForm() - { - if (_frmMain.pnlDock.InvokeRequired) - _frmMain.pnlDock.Invoke((MethodInvoker)ShowMcForm); - else - _messageWindow.Show(_frmMain.pnlDock); - } } } \ No newline at end of file