public void MessagesAreDeliveredOnTheUserInterfaceThread()
        {
#if !SILVERLIGHT // In silverlight the tests are already running on the UI Thread with the Synchronization context set.
            SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());
#endif

            using (var kernel = this.CreateKernel())
            {
                var publisher = kernel.Get <PublisherMock>();
                var sub       = kernel.Get <SubscriberUserInterfaceMock>();
                var id        = Thread.CurrentThread.ManagedThreadId;
                Debug.WriteLine("Current Thread : " + id);
                Debug.WriteLine("Context : " + SynchronizationContext.Current);

                ThreadPool.QueueUserWorkItem(s => publisher.SendMessage(UserInterfaceSynchronizedMessage));
                Thread.Sleep(1000);     // give the BG thread enough time to be created and execute.
#if !SILVERLIGHT
                Application.DoEvents(); // processes all waiting messages
                sub.LastMessage.ShouldBe(UserInterfaceSynchronizedMessage);
                sub.DeliveryThreadId.ShouldBe(id);
#else
                subscriber = sub;
#endif
            }
        }
        public void DisposingObjectRemovesSubscriptionsRequestedByIt()
        {
            using (var kernel = this.CreateKernel())
            {
                var publisher  = kernel.Get <PublisherMock>();
                var subscriber = kernel.Get <SubscriberMock>();

                var             messageBroker = kernel.Components.Get <IWeakEventMessageBroker>();
                IMessageChannel channel       = messageBroker.GetChannel("message://PublisherMock/MessageReceived");
                int             subscriptionCountBeforeSubscriberDisposal = channel.Subscriptions.Count;

                subscriber.ShouldNotBeNull();
                subscriber = null; // needed for GC to clean.
                GC.Collect();
                GC.WaitForPendingFinalizers();
                publisher.SendMessage("message"); // when messages are sent the subscriptions are updated.
                int subscriptionCountAfterSubscriberDisposal = channel.Subscriptions.Count;

                subscriptionCountBeforeSubscriberDisposal.ShouldBe(1);
                subscriptionCountAfterSubscriberDisposal.ShouldBe(0);
            }
        }
        public void MessagesAreDeliveredOnTheUserInterfaceThread()
        {
#if !SILVERLIGHT // In silverlight the tests are already running on the UI Thread with the Synchronization context set.
            SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());
#endif

            using (var kernel = this.CreateKernel())
            {
                var publisher = kernel.Get<PublisherMock>();
                var sub = kernel.Get<SubscriberUserInterfaceMock>();
                var id = Thread.CurrentThread.ManagedThreadId;
                Debug.WriteLine("Current Thread : " + id);
                Debug.WriteLine("Context : " + SynchronizationContext.Current);

                ThreadPool.QueueUserWorkItem(s => publisher.SendMessage(UserInterfaceSynchronizedMessage));
                Thread.Sleep(1000); // give the BG thread enough time to be created and execute.
#if !SILVERLIGHT
                Application.DoEvents(); // processes all waiting messages
                sub.LastMessage.ShouldBe(UserInterfaceSynchronizedMessage);
                sub.DeliveryThreadId.ShouldBe(id);
#else
                subscriber = sub;
#endif
            }
        }
        public void DisposingObjectRemovesSubscriptionsRequestedByIt()
        {
            using (var kernel = this.CreateKernel())
            {
                var publisher = kernel.Get<PublisherMock>();
                var subscriber = kernel.Get<SubscriberMock>();

                var messageBroker = kernel.Components.Get<IWeakEventMessageBroker>();
                IMessageChannel channel = messageBroker.GetChannel("message://PublisherMock/MessageReceived");
                int subscriptionCountBeforeSubscriberDisposal = channel.Subscriptions.Count;

                subscriber.ShouldNotBeNull();
                subscriber = null; // needed for GC to clean.
                GC.Collect();
                GC.WaitForPendingFinalizers();
                publisher.SendMessage("message"); // when messages are sent the subscriptions are updated.
                int subscriptionCountAfterSubscriberDisposal = channel.Subscriptions.Count;

                subscriptionCountBeforeSubscriberDisposal.ShouldBe(1);
                subscriptionCountAfterSubscriberDisposal.ShouldBe(0);
            }
        }