2009-07-01 11 views
5

Tengo un controlador de eventos en el código que veo que se llama varias veces cuando estoy esperando que solo se llame una vez..NET gestión del manejo de eventos

En el pasado, esto se debe a que he definido la delegación en el lugar equivocado (por lo que se agrega más delegado a la lista de manejo de eventos), pero en esta ocasión solo se establece una vez (en el constructor de la clase)

En lugar de continuar buscando manualmente a través de mi código buscando errores, ¿hay un enfoque pragmático (simple) que pueda tomar para determinar dónde se asignan los controladores de eventos?

Respuesta

18

Puede reemplazar el valor por defecto:

public event EventHandler MyEvent; 

... con

private EventHandler _myEvent; 

public event EventHandler MyEvent 
{ 
    add { _myEvent += value; } 
    remove { _myEvent -= value; } 
} 

A continuación, se puede poner la tala o puntos de ruptura dentro de la adición/quitar funciones y mirar la pila de llamadas.

+0

Nice suggestion +1 –

+0

Esa es una solución muy simple y ordenada, funciona como un encanto. Gracias. –

1

si está utilizando vb.net, entonces, ¿está seguro de que no está agregando el controlador en un método y también está utilizando la palabra clave handles?

esto hace que un evento se maneje dos veces.

+0

Buena idea, pero nuevamente esto se enfoca en la búsqueda manual. También estoy usando C#. Gracias de cualquier manera. –

1

Instale Resharper, luego haga clic derecho en su evento y seleccione "Buscar usos".

+0

Me encantaría, pero no tengo licencia o presupuesto para ello :-( –

+0

Diría que se paga por sí mismo en aproximadamente 1 mes. Nunca aceptaría trabajar sin (o algo similar) de nuevo. –

1

Tengo un código para ello. Sus 2 clases para acceder a la ayuda a los eventos

Event Classes

Y en mi código introducen esto:

alt text http://img440.imageshack.us/img440/1656/featurer.jpg

Ahora puede depurar eventos de entrar en

CSoft.Core.EventHelper.Raise(); 
+0

Buena sugerencia, pero La idea de Rogers de un accesorio personalizado es realmente simple y funciona como un amuleto. Gracias por su entrada de todos modos. –

0

Puede cambiar nombre (no utiliza herramientas de reelaboración de Visual Studio, simplemente cambie el nombre en el código) y vea dónde se rompe el compilador .

Cuestiones relacionadas