2012-03-02 5 views
3

j'ai un System.Windows.Forms.Form comme ceci:Disposing classe abonnés à un événement

public class MainForm : Form 
{ 
    int _processProgress; 
    public int ProcessProgress 
    { 
     get { return _processProgress; } 
     set 
     { 
      _processProgress = value; 
      if (ProcessProgressChanged != null) 
       ProcessProgressChanged(value); 
     } 
    } 

    public delegate void ProcessProgressChangedEventHandler(int progressPercentage); 
    public event ProcessProgressChangedEventHandler ProcessProgressChanged; 
} 

Et il a un UserControl comme celui-ci:

public class MainFormControl : UserControl 
{ 
    public MainFormControl() 
    { 
     ((MainForm)this.ParentForm).ProcessProgressChanged += (progPerc) => 
      { 
       this.TextBox1.Text = "asd"; 
       // Do something 
      }; 
    } 
} 

Sera-t-désabonner de la méthode anonyme de la constructeur duMainFormControlduMainForm.ProcessProgressChangedévénement lorsque leMainFormControl.Dispose()est appelé (ou lorsque le MainFormControl est supprimé de MainForm)?

Mon code est en C#, framework 4, construit en VS2010 Pro, le projet est en WinForms.

Aidez-nous s'il vous plaît. Merci d'avance.

Répondre

1

Non, mais si les contrôles sont sur la forme et le formulaire est disposé, il n'a pas d'importance ...

Ce que vous devez surveiller est lorsque les formulaires/commandes crochet jusqu'à AVAL services à long terme (singletons, etc.) Vous devez faire attention car l'événement peut/tirera même lorsque le contrôle/formulaire est éliminé. Si le gestionnaire fait quelque chose qui suppose que l'interface utilisateur est toujours là (c'est-à-dire non disposé) - vous rencontrez des problèmes ...

+0

Alors est-il correct d'exécuter l'événement 'MainForm.ProcessProgressChanged' même si le' MainFormControl' est disposé? –

+0

On dirait qu'il y a un malentendu ici. Lorsque 'MainForm' appelle l'événement' ProcessProgressChanged', votre code (où il est dit 'doSomething') est appelé (sur le même thread). Si MainForm dispose et appelle l'événement, il attendra. Si elle est disposée, il ne devrait pas être tirant des événements à être avec. – debracey

+0

Mais que se passe-t-il si mon code 'doSomething' utilise un contrôle à l'intérieur de' MainFormControl' (comme '((MainFormControl) this) .TextBox1.Text =" asd "')? Est-il correct de disposer le 'MainFormControl' par le' MainForm' _ (je ne dispose pas du formulaire, ce que je dispose est le contrôle du formulaire) _? –

Questions connexes