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>))); }
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 }
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(); }
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(); }
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(); }
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(); } }
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(); } }
public void Now() { var res = new ControlScheduler(new Label()).Now - DateTime.Now; Assert.True(res.Seconds < 1); }
public void Now() { var res = new ControlScheduler(new Label()).Now - DateTime.Now; Assert.True(res.Seconds < 1); }
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(); }
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)); }
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(); }
/// <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)); }