Ceci est un scratcheur de tête. J'ai un formulaire avec un certain nombre de contrôles personnalisés à ce sujet. La première fois que j'en crée une instance, tout fonctionne normalement.Pourquoi les contrôles C# ayant IsDisposed sont-ils mis à "Vrai" sans le déclenchement de la méthode "Dispose"
Le problème se produit lorsque je ferme le formulaire et puis créer une deuxième instance de celui-ci. Certains de mes contrôles ont un événement qui est (conditionnellement) levé au cours d'une souris. En OnMouseOver()
immédiatement avant d'élever MyEvent
tout est normal, mais au moment où j'entre la méthode MyControl_MyEvent
IsDisposed
est mis à vrai sur le formulaire et tous ses contrôles enfants. Cela se produit malgré le fait que les points d'arrêt dans la méthode Dispose
du formulaire et des contrôles ne sont jamais déclenchés.
Le cours des événements que j'ai décrits ci-dessus n'est pas unique; Je peux déclencher la même erreur dans quelques autres endroits, mais je n'ai pas percé la pile d'appels avec autant de détails en essayant de trouver exactement où IsDisposed
est mis à vrai.
//MyConrol
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (conditions)
{
if (MyEvent != null)
MyEvent(this, new EventArgs()); //nothing disposed here
}
}
//the first of several classes that have sbuscribed to the event
void MyControl_MyEvent(object sender, EventArgs e)
{
//IsDisposed = true here if this is the second time the form has been displayed.
DoStuff();
}
protected override void Dispose(bool disposing)
{ //the breakpoint here is never triggered
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Quelqu'un peut-il suggérer comment je peux comprendre ce qui se passe?
Pouvez-vous coller le code où vous détruisez et recréer le formulaire? – cdhowie
Comme @cdhowie dit, pas assez d'infos. J'aimerais également voir un exemple de Dispose de ces contrôles personnalisés. Des membres statiques? –
@Henk Holterman Voir mon commentaire sur la réponse de SLaks, mon EventHandler était statique. –