| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.using System;#if NETCOREAPP1_0using System.Threading;#elif !WINDOWS_UWPusing System.Windows.Threading;#endifnamespace ReactiveTests{#if HAS_DISPATCHER    static class DispatcherHelpers    {        public static DispatcherWrapper EnsureDispatcher()        {#if DESKTOPCLR            var dispatcher = new Thread(Dispatcher.Run);            dispatcher.IsBackground = true;            dispatcher.Start();            while (Dispatcher.FromThread(dispatcher) == null)                Thread.Sleep(10);            var d = Dispatcher.FromThread(dispatcher);            while (d.BeginInvoke(new Action(() => { })).Status == DispatcherOperationStatus.Aborted) ;            return new DispatcherWrapper(d);#else            return new DispatcherWrapper(Dispatcher.CurrentDispatcher);#endif        }    }    class DispatcherWrapper    {        private Dispatcher _dispatcher;        public DispatcherWrapper(Dispatcher dispatcher)        {            _dispatcher = dispatcher;        }        public Dispatcher Dispatcher { get { return _dispatcher; } }        public void InvokeShutdown()        {#if !USE_SL_DISPATCHER            _dispatcher.InvokeShutdown();#endif        }        public static implicit operator Dispatcher(DispatcherWrapper wrapper)        {            return wrapper._dispatcher;        }#if !USE_SL_DISPATCHER        public event DispatcherUnhandledExceptionEventHandler UnhandledException        {            add { _dispatcher.UnhandledException += value; }            remove { _dispatcher.UnhandledException -= value; }        }#endif        public void BeginInvoke(Action action)        {            _dispatcher.BeginInvoke(action);        }    }#endif}
 |