如何实际使用事件?

时间:2010-01-19 19:38:22

标签: c# events

任何人都可以在C#(或任何.NET语言)中使用事件清楚的示例吗? 互联网上有很多这样的东西,但大多数都很复杂,并不适用于所有情况。请尽可能

6 个答案:

答案 0 :(得分:2)

事件是 event-driven programming 的基础(显然)。因此,只要您想根据其他事情采取行动,事件就是适当的。什么东西可能是无数的东西 - 用户点击按钮,计时器流逝,窗口关闭等等。由于有很多不同的场景,很难使它真正普及。

一个例子是当用户点击按钮时用文本填充标签:

btnMyButton.Click += (o, ev) => { SetTextLabel(label1, "You clicked the button"); };

请注意,SetTextLabel是一个你可以提供的函数,它应该是ThreadSafe(否则我会被评论者抨击,说我的代码不是这样。)

答案 1 :(得分:2)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class EXMAPLE 
    {
        public event EventHandler Changed;
        protected string _content;

        public string Content{
            get { return _content; }
            set 
            {
                _content = value;
                OnChanged(EventArgs.Empty);
            }
        }

        // Invoke the Changed event; called whenever list changes:
        protected virtual void OnChanged(EventArgs e)
        {
            if (Changed != null)
                Changed(this, e);
        }
    }


    class Program
    {
        private static void EXAMPLE_CONTENT_CHANGED(object sender, EventArgs e)
        {
            EXMAPLE ex = (EXMAPLE)sender;
            Console.WriteLine(ex.Content);
        }

        private static void INNA_REAKCJA(object sender, EventArgs e)
        {
            Console.WriteLine("The Content of EXAMPLE was changed");
        }


        static void Main(string[] args)
        {
            EXMAPLE ex1 = new EXMAPLE();
            EXMAPLE ex2 = new EXMAPLE();

            //add event ;->
            ex1.Changed += new EventHandler(EXAMPLE_CONTENT_CHANGED);

            ex2.Changed += new EventHandler(EXAMPLE_CONTENT_CHANGED);
            ex2.Changed += new EventHandler(INNA_REAKCJA);  

            //test
            ex1.Content = "value 1";
            ex2.Content = "value 2";

            System.Console.ReadKey();
        }
    }
}

这只是一个简单的例子 - 不是普遍的; p

答案 2 :(得分:2)

最简单的示例是当您创建包含可点击控件(如按钮)的表单时。当您双击该按钮时,Visual Studio将在后面的代码中生成一个事件,该事件指向将在事件被触发时调用的方法。

this.MyButton.Click += new System.EventHandler(this.MyButton_Click);

一般情况下,事件基本上是一个对象发送的消息,用于通知其他对象发生了一个动作。

答案 3 :(得分:1)

从你的帖子中,你似乎想要一个“例子”,它将“适用于所有情况”,同时具有“普遍性”和“实用性”。我不明白这是怎么可能的。

如果您只想更好地了解事件,请启动here。你可以找到更短的东西,但可能不会更清楚。

答案 4 :(得分:1)

  • 更新进度和完成任务。
  • 对用户输入做出反应
  • 计时器

答案 5 :(得分:0)

事件是处理用户界面与应用程序其余部分交互的当前方式。微软未来进入事件驱动的开发取决于这项称为RX Extensions的新技术的未来(尽管看起来很有希望)。 Java具有Actionlistener组件(来自观察者模式),如果您知道它并且可以评估事件的可用性(在UI中)。事件通常是在发生某些事情时向引用对象提供通知的机制。

同时查看msdn的相关教程。

示例:

    List.Changed -= new ChangedEventHandler(ListChanged);

这里开发人员连接了将通过List容器的Changed事件的上升来调用的方法。因此,当列表更改(添加或删除项目)时,将调用此方法。