public void TestAttachAndDetach2()
 {
     var h = new EventHost ();
     Assert.IsFalse (h.HasMyEvent, "#1");
     string value = null;
     // FromEvent<TDelegate,TEventArgs> (Func<Action<TEventArgs>, TDelegate> conversion, Func<TDelegate> addHandler, Func<TDelegate> removeHandler)
     var source = Observable.FromEvent<MyEventHandler, MyEventArgs> (
         eh => new MyEventHandler (s => eh (new MyEventArgs (s))),
         ev => h.MyEvent += ev,
         ev => h.MyEvent -= ev);
     Assert.IsFalse (h.HasMyEvent, "#2"); // not subscribed yet
     var dis = source.Subscribe (v => value = v.Value);
     Assert.IsTrue (h.HasMyEvent, "#3");
     h.FireMyEvent ("foo");
     Assert.AreEqual ("foo", value, "#4");
     dis.Dispose (); // unsubscribe event handler
     Assert.IsFalse (h.HasMyEvent, "#6");
 }
        public void TestAttachAndDetach2()
        {
            var h = new EventHost();

            Assert.IsFalse(h.HasMyEvent, "#1");
            string value = null;
            // FromEvent<TDelegate,TEventArgs> (Func<Action<TEventArgs>, TDelegate> conversion, Func<TDelegate> addHandler, Func<TDelegate> removeHandler)
            var source = Observable.FromEvent <MyEventHandler, MyEventArgs> (
                eh => new MyEventHandler(s => eh(new MyEventArgs(s))),
                ev => h.MyEvent += ev,
                ev => h.MyEvent -= ev);

            Assert.IsFalse(h.HasMyEvent, "#2");              // not subscribed yet
            var dis = source.Subscribe(v => value = v.Value);

            Assert.IsTrue(h.HasMyEvent, "#3");
            h.FireMyEvent("foo");
            Assert.AreEqual("foo", value, "#4");
            dis.Dispose();              // unsubscribe event handler
            Assert.IsFalse(h.HasMyEvent, "#6");
        }