Не зная о своем приложении, я предлагаю, чтобы вам нужно было вызвать событие в классе, обрабатываемом формой. Что происходит, так это:
- Класс имеет событие.
- Форма запускает и создает класс.
- Форма назначает обработчик событию в классе.
- Класс делает все, что ему нужно, пока не достигнет точки, где ему необходимо связаться с формой.
- Класс вызывает событие.
- Обработчик в форме запускается и изменяется текстовое поле.
Так в коде класса вам нужно добавить несколько определений:
public delegate void FinishedEventHandler(object sender, string ValueToReturn);
public event FinishedEventHandler Finished;
Первый делегат с подписью события. По соглашению первый аргумент всегда является ссылкой на экземпляр самого класса, а остальные - значения, которые вы хотите вернуть. Второе - это фактическое событие.
Теперь в функцию, которая делает то, что обработка класса делает нам нужно поднять событие, когда соответствующее:
void DoSomething()
{
.
.
.
if(Finished!=null) Finished(this, "some value");
}
Условный пункт используется, чтобы убедиться, что кто-то на самом деле обработки наше мероприятие, в противном случае мы может получить исключение.
Теперь давайте посмотрим на форму. Нам нужно добавить функцию, которая обрабатывает событие. Он должен иметь ту же подпись, что и делегат, который мы определили ранее. В этой функции мы делаем то, что изменения, которые мы должны в форме в свете ценностей, которые мы получаем обратно:
private void FinishedEventHandler(object sender, string ValueToReturn)
{
TextBox1.Text = ValueToReturn;
}
Теперь мы готовы использовать все, что сантехнику мы только что создали. Сначала мы добавляем обработчик к событию, тогда мы можем вызвать функции обработки класса.
MyClass.Finished += FinishedEventHandler;
MyClass.DoSomething();
Вот более подробный учебник:
http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx
Фактически все это может быть выражено в трех строках кода, что, безусловно, может быть сделано в рамках короткого ответа. Шаг 6 не имеет никакого кода, связанного с ним, а шаги 2 и 4 - это вещи, которые реально можно ожидать, что ОП будет самостоятельно определять; они не должны быть в вашем ответе. Это действительно хороший подход к использованию. – Servy
Одна вещь, о которой не упоминает Система, заключается в том, что вы выполняете перекрестную связь, вам нужно будет «вызывать» внутри обработчика события в форме. –
1) При определении события нет необходимости определять свой собственный тип делегата. Просто используйте 'Action' /' Func', или если вы действительно считаете себя обязанным использовать обработчик на основе событий, вы можете использовать «EventHandler». 2) для назначения обработчика события вы можете использовать лямбда, что намного эффективнее для этих реальных небольших событий, хотя именованный метод всегда можно использовать для нетривиальных обработчиков. –
Servy