public void SynchronizedInvokerIsASingletonPerSynchronizationContext()
        {
            var syncContext1Invoker1 = SynchronizedInvoker.GetInstance();
            var syncContext1Invoker2 = SynchronizedInvoker.GetInstance();

            InitSynchronizationContext();
            var syncContext2Invoker1 = SynchronizedInvoker.GetInstance();

            Assert.IsTrue(ReferenceEquals(syncContext1Invoker1, syncContext1Invoker2));
            Assert.IsFalse(ReferenceEquals(syncContext1Invoker1, syncContext2Invoker1));
        }
        public void SynchronizedInvokerSendsToASyncContext()
        {
            string invokedWith = null;
            var    sub         = new Subscription(new Action <string>(s => invokedWith = s));
            var    invoker     = SynchronizedInvoker.GetInstance();

            Task.Factory.StartNew(() => invoker.Invoke(sub, "Hello")).Wait();

            Assert.AreEqual(1, _syncContextMock.CallCount);
            Assert.AreEqual("Hello", invokedWith);
        }
        public void SynchronizedInvokerUsesSynchronizationContextOnlyIfInvokedOnDifferentThread()
        {
            string invokedWith = null;
            var    sub         = new Subscription(new Action <string>(s => invokedWith = s));
            var    invoker     = SynchronizedInvoker.GetInstance();

            invoker.Invoke(sub, "Hello");
            Assert.AreEqual(0, _syncContextMock.CallCount);
            Assert.AreEqual("Hello", invokedWith);

            Task.Factory.StartNew(() => invoker.Invoke(sub, "Hello2")).Wait();
            Assert.AreEqual(1, _syncContextMock.CallCount);
            Assert.AreEqual("Hello2", invokedWith);
        }
Beispiel #4
0
 public static void Run(Button button)
 {
     SynchronizedInvoker.Invoke(() => button.Text = "running");
     Thread.Sleep(5000);     // do some important work here
     SynchronizedInvoker.Invoke(() => button.Text = "finished");
 }