2009-05-19 23 views
6

Tengo un formulario de Windows con una cuadrícula de datos vinculada a una tabla de datos. Al hacer clic en un botón, la tabla de datos se pasa a una clase estática.generar eventos en una clase estática

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  
     } 
    } 
} 

tengo que pasar de nuevo la información de estado del método SaveData volver a mi forma de modo que pueda informar al usuario cómo se está procesando registro.

decir, por ejemplo - Quiero enviar un mensaje cada 100 registros - "procesar el número de registro ..." para que se muestre en el formulario.

¿es posible generar un evento desde una clase estática?

+0

Gracias por poner el formato del código, Jon; Aún no tengo suficiente reputación ... –

Respuesta

3

Sí, puede plantear un evento desde su clase estática. Defina el evento como estático.

public static event EventHandler MyEvent; 
9

sí es posible y funciona igual que en las clases de eventos no estáticos hacer (salvo que, por supuesto, tiene que declarar el evento con como static).

Tenga en cuenta que a través de este diseño, puede (al menos en teoría) tener varias formas llamando al SaveData de forma simultánea, por lo que una instancia del método genera eventos destinados al Formulario A, mientras que otra instancia generará eventos destinados al Formulario B. Como el evento es estático, todos los eventos serán detectados por ambos formularios, por lo que es posible que desee incluir información en caso de que el formulario pueda utilizarse para determinar si una invocación particular del evento es de interés o no.

Podría, por ejemplo, armar una clase EventArgs personalizada y pasar el DataTable en eso, para que el código de escucha pueda ver si es la DataTable de ese formulario. Si es así, la interfaz de usuario se actualizará; si no es así, la llamada simplemente puede ignorarse.

Cuestiones relacionadas