Sample app: Limit output window queue to avoid out of memory exception

This commit is contained in:
mort5161 2014-07-31 13:50:55 -07:00
parent d165526071
commit 46971fc4c8
2 changed files with 13 additions and 5 deletions

View file

@ -22,7 +22,9 @@ namespace SampleApp.Store
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
private Queue<string> messages = new Queue<string>(101);
public MainPage()
{
this.InitializeComponent();
LoadData();
@ -36,9 +38,11 @@ namespace SampleApp.Store
}
private void device_MessageReceived(object sender, NmeaParser.NmeaMessageReceivedEventArgs args)
{
Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
var _ = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
output.Text += args.Message.MessageType + ": " + args.Message.ToString() + '\n';
messages.Enqueue(args.Message.MessageType + ": " + args.Message.ToString());
if (messages.Count > 100) messages.Dequeue(); //Keep message queue at 100
output.Text = string.Join("\n", messages.ToArray());
});
}
}

View file

@ -20,6 +20,8 @@ namespace SampleApp.WinDesktop
/// </summary>
public partial class MainWindow : Window
{
private Queue<string> messages = new Queue<string>(101);
public MainWindow()
{
InitializeComponent();
@ -27,12 +29,14 @@ namespace SampleApp.WinDesktop
device.MessageReceived += device_MessageReceived;
var _ = device.OpenAsync();
}
private void device_MessageReceived(object sender, NmeaParser.NmeaMessageReceivedEventArgs args)
{
Dispatcher.BeginInvoke((Action) delegate()
{
output.Text += args.Message.MessageType + ": " + args.Message.ToString() + '\n';
messages.Enqueue(args.Message.MessageType + ": " + args.Message.ToString());
if (messages.Count > 100) messages.Dequeue(); //Keep message queue at 100
output.Text = string.Join("\n", messages.ToArray());
output.Select(output.Text.Length - 1, 0); //scroll to bottom
if(args.Message is NmeaParser.Nmea.Gps.Gpgsv)