哪位大哥可以给个C#监听器的例子看看 ~~ 最好有详细注释的   小弟想用监听器写个类似网络会议的东西 
  可刚接触C#没多长时间,不懂监听器 ,  请哪位大哥教教,在此谢谢了 

解决方案 »

  1.   

    接口HttpSessionListenersessionCreated() 当一个用户session创建时调用sessionDestroyed()当一个用户session销毁时调用
    private static int count=0;public void sessionCreated(HttpSessionEvent arg0) {     count++;     System.out.println("有人上线了,当前在线人数:"+count);}public void sessionDestroyed(HttpSessionEvent arg0) {     count--;     System.out.println("有人下线了,当前在线人数:"+count);}
    web.xml配置<!-- 实现类 --><listener><listener-class>com.sxy.listener.MyHttpSessionListener</listener-class></listener>
    HttpSessionAttributeListenerattributeAdded() 会话调用setAttribute("user",obj)时调用,user不存在时attributeReplaced()会话调用setAttribute("user",obj)时调用,user存在时attributeRemoved()会话调用removeAttribute("user")时调用
    HttpSessionBindingListener(不需要再web.xml中配置)HttpSessionActivationListener
    ServletContextAttributeListene,ServletRequestAttributeListener这来两个接口和HttpSessionAttributeListener使用方式类似
    ServletContextListener 加载web应用的时候(启动服务器)和关闭web应用的时候ServletRequestListener 当request对象创建和销毁的时候
      

  2.   

            public void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MARK = true;
                if (fm2 == null)
                {
                    fm2 = new Form2();
                    fm2.TopLevel = false;
                    fm2.Width = this.splitContainer1.Panel2.Width;
                    fm2.Height = this.splitContainer1.Panel2.Height;
                    fm2.richTextBox1.Width = fm2.Width - 24;
                    fm2.richTextBox1.Height = fm2.Height - 24;
                    fm2.Validate();
                    this.splitContainer1.Panel2.Controls.Clear();
                    this.splitContainer1.Panel2.Controls.Add(fm2);
                    fm2.Visible = true;
                }
                else
                {
                    //在新建文档文本之前判断是否存在子窗口,再判断子窗口里内容是否有被修改过,判断是否已经保存
                    for (int i = 0; i < list_names.Count; i++)
                    {
                        if (list_names[i] == this.Text)
                        {
                            if (list_texts[i] != fm2.richTextBox1.Text)
                            {
                                if (MessageBox.Show(this.Text + "的内容已被修改过,是否保存?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                                {
                                    //该处调用保存文本监听器
                                    EventArgs enew = new EventArgs();
                                    //之前MARK已经设为true,所以第一次必定跳过,后来的用于判断是否保存成功
                                    MARK = false;
                                    保存ToolStripMenuItem_Click(fm2, enew);
                                }
                                break;
                            }
                        }
                    }
                }
                if (MARK)
                {
                    NO++;
                    //当存在相同名字的,自动更改新建文档的名字直到不再相同,考虑当一开始是打开操作,防止后来重名操作处理
                    //防止重名有利于处理后来的查找更新保存首次性问题,考虑存在先打开后新建情况
                    if (list_names.Count > 0)
                    {
                        while (list_names.Contains(System.IO.Path.GetFullPath(".\\") + "文本" + NO + ".txt"))
                        {
                            NO++;
                        }
                    }
                    //通过listbox作为标题切换文本内容,list_names与list_texts作为与listbox项里同步的序号更新,查找时list_names匹配的序号也对应着相应的list_texts所装载的内容
                    string name = System.IO.Path.GetFullPath(".\\") + "文本" + NO + ".txt";
                    listBox1.Items.Add(name);
                    list_names.Add(name);
                    //新建时文本内容为空,所以list_texts所对应的指定文本内容初始值为空
                    list_texts.Add("");
                    this.Text = name;
                    //新建后的文档文本内容为空
                    fm2.richTextBox1.Text = "";
                }
            }