replaced Timer implementation with Task async call

fixes #1052
This commit is contained in:
David Sparer
2018-07-29 12:02:41 -05:00
parent 9769d5af06
commit f483a2dc2f

View File

@@ -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);
}
}
}