Как практически использовать События?

2

Может ли кто-нибудь разместить четкие примеры для использования событий в С# (или любого языка .NET)? Их много в Интернете, но большинство из них сложны, и они не распространяются на каждую ситуацию. Сделайте это универсальным , если возможно, пожалуйста.

  • 0
    OnClick кажется довольно универсальным. Можете быть более конкретными?
  • 0
    Хорошо, забудь эту часть. Я прошу простой, как можно более урезанный пример, чтобы показать, как события работают самым простым образом. Я понимаю, что такое Событие, мне просто нужно посмотреть, как оно работает в .Net
Теги:
events

6 ответов

2
Лучший ответ

События являются основой событийное программирование (очевидно). Таким образом, событие подходит в любое время, когда вы хотите предпринять действия (действия) на основе чего-то еще. Что-то еще может быть множеством вещей - пользователь, нажимая кнопку, таймер, закрывающийся окно и т.д. Это трудно сделать его действительно универсальным, так как существует так много разных сценариев.

Одним из примеров может быть заполнение метки текстом, когда пользователь нажимает кнопку:

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

Обратите внимание, что SetTextLabel - это функция, которую вы бы предоставили, и это должен быть ThreadSafe (иначе меня бы раздражали комментаторы, говорящие, что мой код не был таким).

  • 0
    Это использует предикат в качестве функции (я знаю, что это делегат)? Хороший, не знал этого!
  • 0
    Да, это замечательно для относительно коротких обработчиков событий, хотя в обычной форме Windows это как бы лишает смысла иметь дизайнера ... Обычно я бы не использовал его таким образом для событий формы, но для событий, которые другие (не-пользовательский интерфейс) ) объекты выставляют. Обратите внимание, что в этом примере я не использую object o или System.EventHandler ev но вы, безусловно, можете использовать их.
Показать ещё 3 комментария
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

  • 0
    Практическое использование показано довольно ясно, хороший!
2

Самый простой пример - когда вы создаете форму, содержащую интерактивный элемент управления, такой как кнопка. Когда вы дважды щелкаете по кнопке, Visual Studio будет генерировать событие в коде, указывающем на метод, который будет вызываться, когда событие будет запущено.

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

В общем случае события - это в основном сообщения, отправленные объектом для уведомления других объектов о том, что действие произошло.

  • 0
    Весьма полезно, вы просто привели короткий и понятный пример, как это сделать. Я this.MyButton.Click является объектом EventHandler?
  • 0
    MyButton_Click - это метод, объявленный с подписью EventHandler.
1

Из вашего поста, кажется, что вы хотите "пример", который "применим к каждой ситуации", будучи "универсальным" и "практичным". Я не понимаю, как это возможно.

Если вы просто хотите лучше понять события, запустите здесь. Вы можете найти что-то более короткое, но оно может быть неясным.

  • 0
    Мне нужен короткий пример - кусок кода, чтобы увидеть, как он работает.
1
  • Предоставление обновлений и завершение выполнения задач.
  • Реакция на ввод пользователя
  • Таймеры
0

События - это текущий способ взаимодействия с пользовательским интерфейсом с остальной частью приложения. Будущее Microsoft в развитии событий зависит от будущего этой новой технологии, называемой RX Extensions, хотя (кажется, очень многообещающей). Java имеет компонент Actionlistener (исходящий из шаблона наблюдателя), если вы его знаете и можете оценить удобство использования событий (в пользовательском интерфейсе). События в целом - это механизм, с помощью которого уведомления передаются объекту-референту, когда что-то происходит.

Также проверьте соответствующий учебник из msdn.

Пример:

    List.Changed -= new ChangedEventHandler(ListChanged);

Здесь разработчик подключил метод, который будет вызываться с ростом события Changed в контейнере List. Таким образом, когда список будет изменен (добавлен или удален элемент), этот метод будет вызван.

  • 0
    Это расширение RX выглядит очень многообещающе. Спасибо за информацию.
  • 0
    Я мог бы проверить это Rx, как я прогрессирую, спасибо за совет!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню