public void ScheduleRelative_Cancel()
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var disp = DispatcherHelpers.EnsureDispatcher();
            var sch  = new DispatcherScheduler(disp);

            sch.Schedule(TimeSpan.FromSeconds(0.1), () =>
            {
                Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);

                var d = sch.Schedule(TimeSpan.FromSeconds(0.1), () =>
                {
                    Assert.True(false);
                    evt.Set();
                });

                sch.Schedule(() =>
                {
                    d.Dispose();
                });

                sch.Schedule(TimeSpan.FromSeconds(0.2), () =>
                {
                    Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
                    evt.Set();
                });
            });

            evt.WaitOne();
            disp.InvokeShutdown();
        }
        public void Dispatcher_ScheduleActionDue()
        {
            var id   = Thread.CurrentThread.ManagedThreadId;
            var disp = EnsureDispatcher();
            var sch  = new DispatcherScheduler(disp);
            var evt  = new ManualResetEvent(false);
            var sw   = new Stopwatch();

            sw.Start();
            sch.Schedule(() =>
            {
                sw.Stop();
                Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                sw.Start();
                sch.Schedule(() =>
                {
                    sw.Stop();
                    Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                    evt.Set();
                }, TimeSpan.FromSeconds(0.2));
            }, TimeSpan.FromSeconds(0.2));
            evt.WaitOne();
            Assert.IsTrue(sw.ElapsedMilliseconds > 380, "due " + sw.ElapsedMilliseconds);
            disp.InvokeShutdown();
        }
 public void Schedule_ArgumentChecking()
 {
     var disp = DispatcherHelpers.EnsureDispatcher();
     var s = new DispatcherScheduler(disp);
     ReactiveAssert.Throws<ArgumentNullException>(() => s.Schedule(42, default(Func<IScheduler, int, IDisposable>)));
     ReactiveAssert.Throws<ArgumentNullException>(() => s.Schedule(42, TimeSpan.FromSeconds(1), default(Func<IScheduler, int, IDisposable>)));
     ReactiveAssert.Throws<ArgumentNullException>(() => s.Schedule(42, DateTimeOffset.Now, default(Func<IScheduler, int, IDisposable>)));
 }
        public void Schedule_ArgumentChecking()
        {
            var disp = DispatcherHelpers.EnsureDispatcher();
            var s    = new DispatcherScheduler(disp);

            ReactiveAssert.Throws <ArgumentNullException>(() => s.Schedule(42, default(Func <IScheduler, int, IDisposable>)));
            ReactiveAssert.Throws <ArgumentNullException>(() => s.Schedule(42, TimeSpan.FromSeconds(1), default(Func <IScheduler, int, IDisposable>)));
            ReactiveAssert.Throws <ArgumentNullException>(() => s.Schedule(42, DateTimeOffset.Now, default(Func <IScheduler, int, IDisposable>)));
        }
        public void Dispatcher_ScheduleAction()
        {
            var id   = Thread.CurrentThread.ManagedThreadId;
            var disp = EnsureDispatcher();
            var sch  = new DispatcherScheduler(disp);
            var evt  = new ManualResetEvent(false);

            sch.Schedule(() => { Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId); evt.Set(); });
            evt.WaitOne();
            disp.InvokeShutdown();
        }
 public void SafeDispatch(Action action)
 {
     if (_dispatcher.Dispatcher.CheckAccess())
     {
         action();
     }
     else
     {
         _dispatcher.Schedule(action);
     }
 }
        private void ScheduleRelative_(TimeSpan delay)
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var disp = DispatcherHelpers.EnsureDispatcher();
            var sch  = new DispatcherScheduler(disp);

            sch.Schedule(delay, () =>
            {
                Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);

                sch.Schedule(delay, () =>
                {
                    Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
                    evt.Set();
                });
            });

            evt.WaitOne();
            disp.InvokeShutdown();
        }
Exemple #8
0
        private void ScheduleRelative_(TimeSpan delay)
        {
            using (DispatcherHelpers.RunTest(out var disp))
            {
                var evt = new ManualResetEvent(false);

                var id = Thread.CurrentThread.ManagedThreadId;

                var sch = new DispatcherScheduler(disp);

                sch.Schedule(delay, () =>
                {
                    Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);

                    sch.Schedule(delay, () =>
                    {
                        Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
                        evt.Set();
                    });
                });

                evt.WaitOne();
            }
        }
        public void Dispatcher_ScheduleActionDueNow()
        {
            var id   = Thread.CurrentThread.ManagedThreadId;
            var disp = EnsureDispatcher();
            var sch  = new DispatcherScheduler(disp);
            var evt  = new ManualResetEvent(false);
            var sw   = new Stopwatch();

            sw.Start();
            sch.Schedule(() =>
            {
                sw.Stop();
                Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                sw.Start();
                sch.Schedule(() =>
                {
                    sw.Stop();
                    Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                    evt.Set();
                }, TimeSpan.Zero);
            }, TimeSpan.Zero);
            evt.WaitOne();
            disp.InvokeShutdown();
        }
Exemple #10
0
        public void Schedule()
        {
            var disp = DispatcherHelpers.EnsureDispatcher();

            RunAsync(evt =>
            {
                var id  = Thread.CurrentThread.ManagedThreadId;
                var sch = new DispatcherScheduler(disp);
                sch.Schedule(() =>
                {
                    Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
                    disp.InvokeShutdown();
                    evt.Set();
                });
            });
        }
Exemple #11
0
 public void Schedule()
 {
     using (DispatcherHelpers.RunTest(out var disp))
     {
         RunAsync(evt =>
         {
             var id  = Thread.CurrentThread.ManagedThreadId;
             var sch = new DispatcherScheduler(disp);
             sch.Schedule(() =>
             {
                 Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
                 evt.Set();
             });
         });
     }
 }
        public void Schedule()
        {
            var disp = DispatcherHelpers.EnsureDispatcher();

            RunAsync(evt =>
            {
                var id  = Thread.CurrentThread.ManagedThreadId;
                var sch = new DispatcherScheduler(disp);
                sch.Schedule(() =>
                {
#if SILVERLIGHT
                    Assert.Equal(id, Thread.CurrentThread.ManagedThreadId); // Single-threaded test framework
#else
                    Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
#endif
                    disp.InvokeShutdown();
                    evt.Set();
                });
            });
        }
        public void Dispatcher_ScheduleActionError()
        {
            var ex = new Exception();

            var id   = Thread.CurrentThread.ManagedThreadId;
            var disp = EnsureDispatcher();
            var evt  = new ManualResetEvent(false);

            disp.UnhandledException += (o, e) =>
            {
                Assert.AreSame(ex, e.Exception.InnerException); // CHECK
                evt.Set();
                e.Handled = true;
            };
            var sch = new DispatcherScheduler(disp);

            sch.Schedule(() => { throw ex; });
            evt.WaitOne();
            disp.InvokeShutdown();
        }
Exemple #14
0
        public void SchedulePeriodic()
        {
            using (DispatcherHelpers.RunTest(out var disp))
            {
                var evt = new ManualResetEvent(false);

                var id = Thread.CurrentThread.ManagedThreadId;

                var sch = new DispatcherScheduler(disp);

                var d = new SingleAssignmentDisposable();

                d.Disposable = sch.SchedulePeriodic(1, TimeSpan.FromSeconds(0.1), n =>
                {
                    Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);

                    if (n == 3)
                    {
                        d.Dispose();

                        sch.Schedule(TimeSpan.FromSeconds(0.2), () =>
                        {
                            Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
                            evt.Set();
                        });
                    }

                    if (n > 3)
                    {
                        Assert.True(false);
                    }

                    return(n + 1);
                });

                evt.WaitOne();
            }
        }
Exemple #15
0
        public void ScheduleError()
        {
            using (DispatcherHelpers.RunTest(out var disp))
            {
                var ex = new Exception();

                var id  = Thread.CurrentThread.ManagedThreadId;
                var evt = new ManualResetEvent(false);

                Exception thrownEx = null;
                disp.UnhandledException += (o, e) =>
                {
                    thrownEx = e.Exception;
                    evt.Set();
                    e.Handled = true;
                };
                var sch = new DispatcherScheduler(disp);
                sch.Schedule(() => { throw ex; });
                evt.WaitOne();

                Assert.Same(ex, thrownEx);
            }
        }
        public void ScheduleError()
        {
            var ex = new Exception();

            var id   = Thread.CurrentThread.ManagedThreadId;
            var disp = DispatcherHelpers.EnsureDispatcher();
            var evt  = new ManualResetEvent(false);

            disp.UnhandledException += (o, e) =>
            {
#if NET45 || NET46
                Assert.Same(ex, e.Exception);                // CHECK
#else
                Assert.Same(ex, e.Exception.InnerException); // CHECK
#endif
                evt.Set();
                e.Handled = true;
            };
            var sch = new DispatcherScheduler(disp);
            sch.Schedule(() => { throw ex; });
            evt.WaitOne();
            disp.InvokeShutdown();
        }
        public void SchedulePeriodic()
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var disp = DispatcherHelpers.EnsureDispatcher();
            var sch  = new DispatcherScheduler(disp);

            var d = new SingleAssignmentDisposable();

            d.Disposable = sch.SchedulePeriodic(1, TimeSpan.FromSeconds(0.1), n =>
            {
                Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);

                if (n == 3)
                {
                    d.Dispose();

                    sch.Schedule(TimeSpan.FromSeconds(0.2), () =>
                    {
                        Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                        evt.Set();
                    });
                }

                if (n > 3)
                {
                    Assert.Fail();
                }

                return(n + 1);
            });

            evt.WaitOne();
            disp.InvokeShutdown();
        }
        public void Schedule()
        {
            var disp = DispatcherHelpers.EnsureDispatcher();

            RunAsync(evt =>
            {
                var id = Thread.CurrentThread.ManagedThreadId;
                var sch = new DispatcherScheduler(disp);
                sch.Schedule(() =>
                {
#if SILVERLIGHT
                    Assert.AreEqual(id, Thread.CurrentThread.ManagedThreadId); // Single-threaded test framework
#else
                    Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
#endif
                    disp.InvokeShutdown();
                    evt.Set();
                });
            });
        }
        public void SchedulePeriodic()
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var disp = DispatcherHelpers.EnsureDispatcher();
            var sch = new DispatcherScheduler(disp);

            var d = new SingleAssignmentDisposable();

            d.Disposable = sch.SchedulePeriodic(1, TimeSpan.FromSeconds(0.1), n =>
            {
                Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);

                if (n == 3)
                {
                    d.Dispose();

                    sch.Schedule(TimeSpan.FromSeconds(0.2), () =>
                    {
                        Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                        evt.Set();
                    });
                }

                if (n > 3)
                {
                    Assert.Fail();
                }

                return n + 1;
            });

            evt.WaitOne();
            disp.InvokeShutdown();
        }
        public void ScheduleRelative_Cancel()
        {
            var evt = new ManualResetEvent(false);
            
            var id = Thread.CurrentThread.ManagedThreadId;

            var disp = DispatcherHelpers.EnsureDispatcher();
            var sch = new DispatcherScheduler(disp);
            
            sch.Schedule(TimeSpan.FromSeconds(0.1), () =>
            {
                Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);

                var d = sch.Schedule(TimeSpan.FromSeconds(0.1), () =>
                {
                    Assert.Fail();
                    evt.Set();
                });

                sch.Schedule(() =>
                {
                    d.Dispose();
                });

                sch.Schedule(TimeSpan.FromSeconds(0.2), () =>
                {
                    Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                    evt.Set();
                });
            });

            evt.WaitOne();
            disp.InvokeShutdown();
        }
        private void ScheduleRelative_(TimeSpan delay)
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var disp = DispatcherHelpers.EnsureDispatcher();
            var sch = new DispatcherScheduler(disp);

            sch.Schedule(delay, () =>
            {
                Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);

                sch.Schedule(delay, () =>
                {
                    Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                    evt.Set();
                });
            });

            evt.WaitOne();
            disp.InvokeShutdown();
        }
        public void ScheduleError()
        {
            var ex = new Exception();

            var id = Thread.CurrentThread.ManagedThreadId;
            var disp = DispatcherHelpers.EnsureDispatcher();
            var evt = new ManualResetEvent(false);
            disp.UnhandledException += (o, e) =>
            {
#if DESKTOPCLR40 || DESKTOPCLR45
                Assert.AreSame(ex, e.Exception); // CHECK
#else
                Assert.AreSame(ex, e.Exception.InnerException); // CHECK
#endif
                evt.Set();
                e.Handled = true;
            };
            var sch = new DispatcherScheduler(disp);
            sch.Schedule(() => { throw ex; });
            evt.WaitOne();
            disp.InvokeShutdown();
        }
Exemple #23
0
 public static IDisposable ScheduleOnUI(this Action action)
 {
     return(UIDispatcherScheduler.Schedule(action));
 }