Ejemplo n.º 1
0
 public void Schedule_ArgumentChecking()
 {
     var s = new ControlScheduler(new Label());
     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>)));
 }
Ejemplo n.º 2
0
        public Form1()
        {
            InitializeComponent();
            _repo = new ObservableHelper<Customer>();
            //SearchList("");//load all

            ControlScheduler cs = new ControlScheduler(this);//WE NEED THIS.
            Observable.FromEventPattern(h => textBox1.TextChanged += h,
                                        h => textBox1.TextChanged -= h)//tell Rx about our event
                .Throttle(TimeSpan.FromMilliseconds(500), cs)///throttle
                .Do(a => SearchList(textBox1.Text))//do this method
                .Subscribe();//this is where we tell it to begin all the magic
        }
Ejemplo n.º 3
0
        public void Schedule()
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var lbl = CreateLabel();
            var sch = new ControlScheduler(lbl);
            
            sch.Schedule(() => { lbl.Text = "Okay"; Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId); });
            sch.Schedule(() => { Assert.Equal("Okay", lbl.Text); Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId); evt.Set(); });

            evt.WaitOne();
            Application.Exit();
        }
Ejemplo n.º 4
0
        public void ScheduleError()
        {
            var evt = new ManualResetEvent(false);

            var ex = new Exception();

            var lbl = CreateLabelWithHandler(e => {
                Assert.Same(ex, e);
                evt.Set();
            });

            var sch = new ControlScheduler(lbl);
            sch.Schedule(() => { throw ex; });

            evt.WaitOne();
            Application.Exit();
        }
Ejemplo n.º 5
0
        private static Task Begin(Func<Task> work)
        {
            Debug.Assert(SynchronizationContext.Current is WindowsFormsSynchronizationContext);

            RenderContext = new ControlScheduler(Monitor);
            ComputeContext = Scheduler.TaskPool;            
            
            Renderer = new Renderer(Monitor.Handle);

            WhenInput = Pentacorn.Input.InitializeGlobal(Monitor.Handle, RenderContext);
            
            Captures = Enumerable.Concat(DirectShowCapture.Devices, CLEyeCapture.Devices).ToList();

            Stopwatch = Stopwatch.StartNew();
            
            Application.Idle += OnIdle;
            
            return work();
        }
        public void SchedulePeriodic_Nested()
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var lbl = CreateLabel();
            var sch = new ControlScheduler(lbl);

            sch.Schedule(() =>
            {
                lbl.Text = "Okay";

                var d = new SingleAssignmentDisposable();

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

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

                        sch.Schedule(TimeSpan.FromSeconds(0.2), () =>
                        {
                            Assert.AreEqual("Okay 3", lbl.Text);
                            Assert.AreNotEqual(id, Thread.CurrentThread.ManagedThreadId);
                            evt.Set();
                        });
                    }

                    return(n + 1);
                });
            });

            evt.WaitOne();
            Application.Exit();
        }
Ejemplo n.º 7
0
        public void ScheduleError()
        {
            using (WinFormsTestUtils.RunTest(out var lbl))
            {
                var evt = new ManualResetEvent(false);

                var ex = new Exception();

                lbl.Invoke(new Action(() =>
                {
                    Application.ThreadException += (o, e) =>
                    {
                        Assert.Same(ex, e.Exception);
                        evt.Set();
                    };
                }));

                var sch = new ControlScheduler(lbl);
                sch.Schedule(() => { throw ex; });

                evt.WaitOne();
            }
        }
Ejemplo n.º 8
0
        public void ScheduleRelative_Cancel()
        {
            using (WinFormsTestUtils.RunTest(out var lbl))
            {
                var evt = new ManualResetEvent(false);

                var id = Thread.CurrentThread.ManagedThreadId;

                var sch = new ControlScheduler(lbl);

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

                    var d = sch.Schedule(TimeSpan.FromSeconds(0.1), () =>
                    {
                        lbl.Text = "Oops!";
                    });

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

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

                evt.WaitOne();
            }
        }
Ejemplo n.º 9
0
 public void Now()
 {
     var res = new ControlScheduler(new Label()).Now - DateTime.Now;
     Assert.True(res.Seconds < 1);
 }
Ejemplo n.º 10
0
 public void Now()
 {
     var res = new ControlScheduler(new Label()).Now - DateTime.Now;
     Assert.True(res.Seconds < 1);
 }
Ejemplo n.º 11
0
        public void SchedulePeriodic_Nested()
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var lbl = CreateLabel();
            var sch = new ControlScheduler(lbl);

            sch.Schedule(() =>
            {
                lbl.Text = "Okay";

                var d = new SingleAssignmentDisposable();

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

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

                        sch.Schedule(TimeSpan.FromSeconds(0.2), () =>
                        {
                            Assert.Equal("Okay 3", lbl.Text);
                            Assert.NotEqual(id, Thread.CurrentThread.ManagedThreadId);
                            evt.Set();
                        });
                    }

                    return n + 1;
                });
            });

            evt.WaitOne();
            Application.Exit();
        }
Ejemplo n.º 12
0
 public void SchedulePeriodic_ArgumentChecking()
 {
     var s = new ControlScheduler(new Label());
     ReactiveAssert.Throws<ArgumentNullException>(() => s.SchedulePeriodic(42, TimeSpan.FromSeconds(1), default(Func<int, int>)));
     ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => s.SchedulePeriodic(42, TimeSpan.Zero, x => x));
     ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => s.SchedulePeriodic(42, TimeSpan.FromMilliseconds(1).Subtract(TimeSpan.FromTicks(1)), x => x));
 }
Ejemplo n.º 13
0
        public void ScheduleRelative_Cancel()
        {
            var evt = new ManualResetEvent(false);

            var id = Thread.CurrentThread.ManagedThreadId;

            var lbl = CreateLabel();
            var sch = new ControlScheduler(lbl);

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

                var d = sch.Schedule(TimeSpan.FromSeconds(0.1), () =>
                {
                    lbl.Text = "Oops!";
                });

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

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

            evt.WaitOne();
            Application.Exit();
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Asynchronously notify observers using the scheduler.
        /// </summary>
        public static IObservable <TSource> ObserveOn <TSource>(this IObservable <TSource> source, ControlScheduler scheduler)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (scheduler == null)
            {
                throw new ArgumentNullException("scheduler");
            }

            return(source.ObserveOn(scheduler.Control));
        }