using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        myevent m = new myevent();
        private void Form2_Load(object sender, EventArgs e)
        {
            m.ePop += new myevent.PopMess(Recevie);
        }        class myevent
        {
            public delegate void PopMess(object sender, EventArgs e);            public event PopMess ePop;            public void Sender(string s)
            {
                if (s == "11")
                {
                if (ePop != null)
                    ePop(this, new EventArgs());
                }            }
        }        public void Recevie(object sender, EventArgs e)
        {
            MessageBox.Show("事件被响应了");
        }        private void button1_Click(object sender, EventArgs e)
        {
            m.Sender("11");
        }    }
}这个事件要执行,我必须要单击button1才能执行代码m.Sender("11")才能触发我自己的事件,
如果一个程序要随时侦测一个事件,比如一旦有"11"出现就触发自己的事件,那这个执行代码.Sender("11")岂不是要放入到线程里面?

解决方案 »

  1.   

    调用一个方法Recevie,你直接调用它就是了,搞什么“事件”?!为什么要使用事件,可能你还没有搞清楚。不是因为它时髦吧?
      

  2.   

    “一个程序要随时侦测一个事件,比如一旦有"11"出现”搞不懂这句话是什么意思?!怎么出现的?你不就是在Button_Click自己写代码才“出现”的嘛。这真是自己扮鬼吓自己。
      

  3.   

    比如外部有信号,一般情况下是“22”,不执行什么程序,一旦出现"11"的时候,是该直接去调用Receive(),还是应该触发一个事件去执行Receive(),请教了
      

  4.   

    不管是“委托”还是“事件”那是别人用的...不能因为都是你在写代码就分不清别人,更不能把你自己别人...认识“协作者”是个什么意思,对象和对象之间有协作才需要委托或事件...你就自个玩儿,搞神马委托事件不就是自己扮鬼吓自己吗...要搞清这个问题,不是单纯的从C#或某语言特性去学去想...你要先理解面向对象的概念,再去理解消息机制和事件机制...不是会写class会继承就面向对象了,面向对象是个思维改变的过程而不是学了几句语法...
      

  5.   

    那我想具体问题具体分析,请教“比如外部有信号,一般情况下是“22”,不执行什么程序,一旦出现"11"的时候,是该直接去调用Receive(),还是应该触发一个事件去执行Receive(),请教了……”该怎么解,用OOP的思想
      

  6.   

    你要先思考...1.这个信号来时,要不要转发给谁...如果要转发,是立即转发还是谁要谁自己来拿...2.处理这个信号后,要不要通知谁...如果要通知,是立即通知还是谁要谁自己来拿...只有以上两个问题至少有一个是“谁要谁自己来拿”,你才需要声明委托或事件...否则,你根本不需要,没人感兴趣的委托或事件声明来有何用?OOP不是赶时髦,人家有你就得有,需要才要...
      

  7.   

    10楼,11楼说的我明白了,外部信号过来时,我把自己当成现在自己正在处理的类,那如果我这个类是处理信号的类,那就直接调用方法,如果我这个类只是用来做其他事情,处理信号的是其他类,那我就用事件。以前我用.net一般只会当做C程序那样写,只注重函数功能,不注重OOP思想,谢各位
      

  8.   

    对啦...OOP是为了让我们用人类的思维方式写代码,传统的OPP或者函数式编程是用计算机的思维方式写代码...不是因为OOP的代码执行效率高,而是因为OOP的代码“设计效率”高,更容易协作...更多人一起编码不会乱不会无效率地等待或难以进行代码管理...即使是你一个人写代码,你也可以更高效地与从前的自己及未来的自己协作...这实际上是工业化的需要...
      

  9.   

    程序思考 OO 时就是导演, 就是建筑师, 就是厨师, 就是老鸨,
    协调各个方面的 构成, 层次和关系,
    将职责合理自然的分配给相应的对象去完成,设计完了你还有亲自扮演各个角色来实现他们,
    嗯,
    在这个层次上说, 程序员很牛B呢.
    即指挥又干活, 即嫖妓又被嫖.很难得, 更难得的是团队内都具备这样的素养.题外的:
    OO跟国情不符, 使得建立这种思维更是难.
    善了个哉的.