summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla28709.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla28709.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla28709.cs94
1 files changed, 94 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla28709.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla28709.cs
new file mode 100644
index 00000000..db67e935
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla28709.cs
@@ -0,0 +1,94 @@
+using System;
+
+using Xamarin.Forms.CustomAttributes;
+using System.Threading.Tasks;
+
+#if UITEST
+using Xamarin.UITest;
+using NUnit.Framework;
+#endif
+
+namespace Xamarin.Forms.Controls
+{
+ [Preserve (AllMembers = true)]
+ [Issue (IssueTracker.Bugzilla, 28709, "Application.Properties saving crash ")]
+ public class Bugzilla28709 : TestContentPage // or TestMasterDetailPage, etc ...
+ {
+ protected override void Init ()
+ {
+
+ var btn = new Button () {
+ Text = "Save Properties",
+ HorizontalOptions = LayoutOptions.Center,
+ VerticalOptions = LayoutOptions.Center
+ };
+
+ var btn1 = new Button () {
+ Text = "Save Properties Multiple Threads",
+ HorizontalOptions = LayoutOptions.Center,
+ VerticalOptions = LayoutOptions.Center
+ };
+ btn.Clicked += OnButtonClicked;
+ btn1.Clicked += (sender, e) => {
+ Task.Run(() => {System.Diagnostics.Debug.WriteLine ("thread 1"); OnButtonClicked1("thread1",new EventArgs());});
+ Task.Run(() => {System.Diagnostics.Debug.WriteLine ("thread 2"); OnButtonClicked1("thread2",new EventArgs());});
+ Task.Run(() => {System.Diagnostics.Debug.WriteLine ("thread 3"); OnButtonClicked1("thread3",new EventArgs());});
+
+ };
+ Content = new StackLayout { Children = { btn, btn1 }};
+ }
+
+ void OnButtonClicked (object sender, EventArgs e)
+ {
+ System.Diagnostics.Debug.WriteLine ($"OnButtonClicked {sender.ToString()}");
+
+ int j = -1;
+ var properties = Application.Current.Properties;
+ int seed = 13;
+ while (++j < 300) {
+ seed = ((seed * 257) + 41) % 65536;
+ int i = seed % 20;
+
+ int previousClickTotal = -1;
+ if (properties.ContainsKey ("PreviousClickTotal" + i.ToString ()))
+ previousClickTotal = (int)(Application.Current.Properties ["PreviousClickTotal" + i.ToString ()]);
+
+ string clickTotal = "0";
+ if (properties.ContainsKey ("ClickTotal" + i.ToString ()))
+ clickTotal = (string)Application.Current.Properties ["ClickTotal" + i.ToString ()];
+
+ double nextClickTotal = 1.0;
+ if (properties.ContainsKey ("NextClickTotal" + i.ToString ()))
+ nextClickTotal = (double)(Application.Current.Properties ["NextClickTotal" + i.ToString ()]);
+
+ Application.Current.Properties ["PreviousClickTotal" + i.ToString ()] = ++previousClickTotal;
+ Application.Current.Properties ["ClickTotal" + i.ToString ()] = previousClickTotal.ToString ();
+ Application.Current.Properties ["NextClickTotal" + i.ToString ()] = ++nextClickTotal;
+
+ SaveAllProperties ();
+ }
+ }
+
+ async void OnButtonClicked1 (object sender, EventArgs e)
+ {
+ System.Diagnostics.Debug.WriteLine ($"OnButtonClicked {sender.ToString()}");
+ //Application.Current.Properties[sender.ToString()] = 1;
+ await Application.Current.SavePropertiesAsync ();
+ System.Diagnostics.Debug.WriteLine ($"OnButtonClicked {sender.ToString()} done");
+ }
+
+ async void SaveAllProperties ()
+ {
+ await Application.Current.SavePropertiesAsync ();
+ }
+
+
+ #if UITEST
+ [Test]
+ public void Bugzilla28709Test ()
+ {
+ RunningApp.Tap (q => q.Marked ("Save Properties"));
+ }
+#endif
+ }
+}