вызывая события в статическом классе - PullRequest
7 голосов
/ 19 мая 2009

У меня есть форма окна с сеткой данных, привязанной к данным. При нажатии кнопки таблица данных передается статическому классу.

private void btnSave_ItemClick(object sender, EventArgs e)
{
   MyStaticClass.SaveData(DataTable dt);
}


internal static class MyStaticClass
{
    internal static void SaveData(DataTable dt)
    {
       foreach(DataRow dr in dt.rows)
       {
           // do something    
       }
    }
}

Мне нужно передать информацию о состоянии из метода SaveData обратно в мою форму, чтобы я мог сообщить пользователю, как обрабатывается запись.

скажем, например - я хочу отправлять сообщение каждые 100 записей - "обработка записи # ....", чтобы оно отображалось в форме.

возможно ли вызвать событие из статического класса?

Ответы [ 2 ]

10 голосов
/ 19 мая 2009

Да, это возможно и работает так же, как и события в нестатических классах (за исключением того, что вам, конечно, нужно объявить событие как static).

Обратите внимание, что благодаря этой схеме вы можете (по крайней мере, теоретически) иметь несколько форм, вызывающих одновременно SaveData, поэтому один экземпляр метода вызывает события, нацеленные на форму A, в то время как другой экземпляр вызывает события, нацеленные на Форма B. Поскольку событие является статическим, все события будут отслеживаться обеими формами, поэтому вы можете включить информацию в событие, которое форма может использовать, чтобы определить, представляет ли интерес конкретный вызов события.

Можно, например, собрать собственный класс EventArgs и передать в него DataTable, чтобы прослушивающий код мог видеть, является ли это DataTable из этой формы. Если это так, пользовательский интерфейс будет обновлен, если это не так, вызов может быть просто проигнорирован.

3 голосов
/ 19 мая 2009

Да, вы можете вызвать событие из вашего статического класса. Определите событие как статическое.

public static event EventHandler MyEvent;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...