События (event) это почти делегаты, только используется ключевое слово event, что позволяет редактору Visual Studio правильно распределять их по закладкам окна свойств.
Описание класса, использующего события:
namespace EventTest
{
/// <summary>
/// Тип метода
/// </summary>
public delegate void Progress(int progress);
public class Parser
{
/// <summary>
/// Описываем событие
/// </summary>
public event Progress ProgressHandler;
/// <summary>
/// Основной метод
/// </summary>
public void Calc()
{
for (int i = 0; i < 100; i++)
{
// Если обработчик задан - вызываем его
if (ProgressHandler != null)
ProgressHandler(i+1);
}
}
}
}
Использование этого класса:
namespace EventTest
{
class Program
{
static void Main(string[] args)
{
// Создаем экземпляр
Parser parser = new Parser();
// Вешаем обработчик
parser.ProgressHandler += new Progress(parser_ProgressHandler);
// Можно и два метода обработки одного события
parser.ProgressHandler+=new Progress(parser_ProgressHandlerSecond);
// Можно описывать обработчики "по месту", хотя это не всегда удобно
parser.ProgressHandler+= delegate(int progress)
{
Console.WriteLine("inline:" + progress);
};
// Вызываем метод
parser.Calc();
}
/// <summary>
/// Этот метод будет вызываться при обработке события
/// </summary>
static void parser_ProgressHandler(int progress)
{
Console.WriteLine("first:" + progress);
}
/// <summary>
/// Можно вешать и два метода
/// </summary>
static void parser_ProgressHandlerSecond(int progress)
{
Console.WriteLine("second:" + progress);
}
}
}
2 comments:
if (ProgressHandler != null)
ProgressHandler(i+1);
Не тред-сейфно )
Дим, это же для студентов :) Мы потоки еще не проходили.
Post a Comment