2010-01-19 2 views
2

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

+0

OnClick кажется довольно универсальным. Можете быть более конкретными? –

+0

Хорошо, забудьте эту часть. Я прошу как можно более простой пример, чтобы показать, как события работают на их простейшем пути. Я понимаю, что такое событие, мне просто нужно посмотреть, как он работает .Net – Johnny

ответ

2

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

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

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

Заметим, что SetTextLabel является функция, которую вы бы обеспечить, и это должно быть THREADSAFE (в противном случае я хотел бы получить толченый комментаторам говорил мой код не был так)

+0

Это использование предиката как функции (я знаю, что это делегат)? Хороший, не знал этого! – Johnny

+0

Да, это замечательно для относительно коротких обработчиков событий, хотя в обычной форме Windows это как бы поражает мысль о дизайнере ... Я обычно не использовал его таким образом для событий формы, но для событий, которые другие (не- UI). Обратите внимание, что в этом примере я не использую 'object o' или' System.EventHandler ev', но вы, безусловно, можете их использовать. –

+0

Ну, я не собираюсь использовать это для WinForms, по крайней мере WinForms - это не причина, по которой я спросил об этом. Однако, не могли бы вы рассказать мне что-нибудь об ev, это 'System.EventArgs', я полагаю, как я могу его использовать? – Johnny

1

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

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

+0

Мне нужен короткий пример - кусок кода, чтобы посмотреть, как он работает. – Johnny

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(); 
     } 
    } 
} 

это лишь простой пример - не универсальны, стр.

+0

Практическое использование показано здесь довольно ясно, приятно! – Johnny

2

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

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

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

+0

Весьма полезно, вы просто указали короткий и ясный пример, как это сделать. Я полагаю, что 'this.MyButton.Click' является объектом EventHandler? – Johnny

+0

MyButton_Click - это метод, объявленный с помощью сигнатуры EventHandler. – Mez

0

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

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

Пример:

List.Changed -= new ChangedEventHandler(ListChanged); 

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

+0

Это RX Extensions выглядит очень многообещающим. Спасибо за информацию. – Tarik

+0

Я могу проверить этот Rx, поскольку я прогрессирую, спасибо за подсказку! – Johnny

+0

Да, Эрик Мейер делает отличную работу. Проверьте канал9 еще раз. Есть много видеороликов, объясняющих эту новую парадигму. ;););) –

Смежные вопросы