From 46971fc4c83f910c6d99ccc3330f19fa4c87a8e2 Mon Sep 17 00:00:00 2001 From: mort5161 Date: Thu, 31 Jul 2014 13:50:55 -0700 Subject: [PATCH] Sample app: Limit output window queue to avoid out of memory exception --- .../SampleApp.Store.Shared/MainPage.xaml.cs | 10 +++++++--- src/SampleApp.WinDesktop/MainWindow.xaml.cs | 8 ++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/SampleApp.Store/SampleApp.Store.Shared/MainPage.xaml.cs b/src/SampleApp.Store/SampleApp.Store.Shared/MainPage.xaml.cs index 3b981a7..d7f2d08 100644 --- a/src/SampleApp.Store/SampleApp.Store.Shared/MainPage.xaml.cs +++ b/src/SampleApp.Store/SampleApp.Store.Shared/MainPage.xaml.cs @@ -22,7 +22,9 @@ namespace SampleApp.Store /// public sealed partial class MainPage : Page { - public MainPage() + private Queue messages = new Queue(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()); }); } } diff --git a/src/SampleApp.WinDesktop/MainWindow.xaml.cs b/src/SampleApp.WinDesktop/MainWindow.xaml.cs index 021c0b0..b4e884f 100644 --- a/src/SampleApp.WinDesktop/MainWindow.xaml.cs +++ b/src/SampleApp.WinDesktop/MainWindow.xaml.cs @@ -20,6 +20,8 @@ namespace SampleApp.WinDesktop /// public partial class MainWindow : Window { + private Queue messages = new Queue(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)