[code=Cusing System;//谁能帮我把下面的代码改变串成一个console程序呢?谢谢。代码里面的代码可能不是像下面这样在一个类里面的哟。可能缺少一些代码,有挑战性的。public delegate void TestEventDelegate(object sender, System.EventArgs e);public class EventSource
{
    public event TestEventDelegate TestEvent;
    private void RaiseTestEvent()
    { 
        //safely invoke an event
        TestEventDelegate temp = TestEvent;        if (temp != null)
        {
            temp(this, new System.EventArgs());
        
        }
        
    }
}public class EventReceiver
{
    public void ReceiveTestEvent(object sender, System.EventArgs e)
    {
        System.Console.Write("event received from ");
        System.Console.WriteLine(sender.ToString());
    }    public void Subscribe(EventSource source)
    {
        TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
        source.TestEvent += temp;
    
    }    public void UnSubscribe(EventSource source)
    {
        TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
        source.TestEvent -= Temp;
    }
}public class EventSource2
{
    private TestEventDelegate TestEventHandlers;
    public event TestEventDelegate TestEvent
    {
        add
        {
            lock (TestEventHandlers)
            {
                TestEventHandlers += value;
            }
        }
        remove
        {
            lock (TestEventHandlers)
            {
                TestEventHandlers -= value;
            }
        }
    }
    private void RaiseTestEvent()
    { 
        //safely invoke an event
        TestEventDelegate temp = TestEventHandlers;        if (temp != null)
        {
            temp(this, new System.EventArgs());
        }
    }
}
[/code]

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace Sort
    {
        class Program
        {
            static void Main(string[] args)
            {            EventSource event1 = new EventSource();
                            EventReceiver evr=new EventReceiver();
                evr.Subscribe(event1);//添加事件
                event1.AddandRemoveEvent();
                evr.UnSubscribe(event1);//移除事件
                event1.AddandRemoveEvent();
                Console.Read();
            }
        }
        public delegate void TestEventDelegate(object sender, System.EventArgs e);    public class EventSource//事件源类1
        {
            public event TestEventDelegate TestEvent;//事件定义
            private void RaiseTestEvent()
            {
                //safely invoke an event 
                TestEventDelegate temp = TestEvent;            if (temp != null)
                {
                    temp(this, new System.EventArgs());            }        }
            //winform或webform中可能是通过一个按钮事件或者某个其它控件事件响应,这里只是简单的用了一个方法
            public void AddandRemoveEvent()
            {
                RaiseTestEvent();
            }
        }    public class EventReceiver
        {
            
            public void ReceiveTestEvent(object sender, System.EventArgs e)
            {
                System.Console.Write("event received from ");
                System.Console.WriteLine(sender.ToString());
            }        public void Subscribe(EventSource source)
            {
                TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
                source.TestEvent += temp;        }        public void UnSubscribe(EventSource source)
            {
                TestEventDelegate temp = new TestEventDelegate(ReceiveTestEvent);
                source.TestEvent -= temp;
            }
        }    public class EventSource2//事件源类2与事件源类1基本相同
        {
            private TestEventDelegate TestEventHandlers;
            public event TestEventDelegate TestEvent//事件定义
            {
                add//+=的事件访问器实现的方式
                {
                    lock (TestEventHandlers)
                    {
                        TestEventHandlers += value;
                    }
                }
                remove//-=事件移除器实现的方式
                {
                    lock (TestEventHandlers)
                    {
                        TestEventHandlers -= value;
                    }
                }
            }
            private void RaiseTestEvent()
            {
                //safely invoke an event 
                TestEventDelegate temp = TestEventHandlers;            if (temp != null)
                {
                    temp(this, new System.EventArgs());
                }
            }
        }
    }