{
public static class AsyncOperationManager
{
- static readonly SynchronizationContext default_context;
- static SynchronizationContext current_context;
-
static AsyncOperationManager ()
{
- default_context = new SynchronizationContext ();
- current_context = default_context;
}
[EditorBrowsable (EditorBrowsableState.Advanced)]
public static SynchronizationContext SynchronizationContext {
- get { return current_context; }
+ get {
+ if (SynchronizationContext.Current == null)
+ SynchronizationContext.SetSynchronizationContext (new SynchronizationContext ());
+
+ return SynchronizationContext.Current;
+ }
[SecurityPermission (SecurityAction.LinkDemand)]
- set { current_context = value != null ? value : default_context; }
+ set { SynchronizationContext.SetSynchronizationContext (value); }
}
public static AsyncOperation CreateOperation (object userSuppliedState)
{
return new AsyncOperation (
- current_context, userSuppliedState);
+ SynchronizationContext, userSuppliedState);
}
}
}
--- /dev/null
+//\r
+// AsyncOperationManager.cs\r
+//\r
+// Author:\r
+// Jonathan Pobst <monkey@jpobst.com>\r
+//\r
+// Copyright (C) 2007 Novell, Inc.\r
+//\r
+\r
+#if NET_2_0\r
+\r
+using System;\r
+using System.Threading;\r
+using System.ComponentModel;\r
+using System.Globalization;\r
+\r
+using NUnit.Framework;\r
+\r
+namespace MonoTests.System.ComponentModel\r
+{\r
+ [TestFixture]\r
+ public class AsyncOperationManagerTest\r
+ {\r
+ [Test]\r
+ public void SyncContext ()\r
+ {\r
+ SynchronizationContext sc1 = new SynchronizationContext ();\r
+ SynchronizationContext sc2 = new SynchronizationContext ();\r
+\r
+ Assert.IsNull (SynchronizationContext.Current, "A1");\r
+ Assert.IsNotNull (AsyncOperationManager.SynchronizationContext, "A2");\r
+ Assert.IsNotNull (SynchronizationContext.Current, "A3");\r
+ \r
+ SynchronizationContext.SetSynchronizationContext (sc1);\r
+\r
+ Assert.AreSame (sc1, SynchronizationContext.Current, "A4");\r
+ Assert.AreSame (sc1, AsyncOperationManager.SynchronizationContext, "A5");\r
+ \r
+ AsyncOperationManager.SynchronizationContext = sc2;\r
+\r
+ Assert.AreSame (sc2, SynchronizationContext.Current, "A6");\r
+ Assert.AreSame (sc2, AsyncOperationManager.SynchronizationContext, "A7");\r
+ \r
+ SynchronizationContext.SetSynchronizationContext (null);\r
+\r
+ Assert.IsNull (SynchronizationContext.Current, "A8");\r
+ // This is a brand new one, not sc1 or sc2\r
+ Assert.IsNotNull (AsyncOperationManager.SynchronizationContext, "A9");\r
+ Assert.IsNotNull (SynchronizationContext.Current, "A10");\r
+ \r
+ AsyncOperationManager.SynchronizationContext = null;\r
+\r
+ Assert.IsNull (SynchronizationContext.Current, "A11");\r
+ // This is a brand new one, not sc1 or sc2\r
+ Assert.IsNotNull (AsyncOperationManager.SynchronizationContext, "A12");\r
+ Assert.IsNotNull (SynchronizationContext.Current, "A13");\r
+ }\r
+ }\r
+}\r
+\r
+#endif\r