Удаление класса, который подписывается на событие - PullRequest
2 голосов
/ 02 марта 2012

У меня есть System.Windows.Forms.Form вот так:

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

И у него есть UserControl вот так:

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

Будет ли отписываться Анонимный метод из конструктора MainFormControl события MainForm.ProcessProgressChanged , когда MainFormControl.Dispose() называется (или когдаMainFormControl удаляется из MainForm) ?

Мой код на C #, framework 4, сборка в VS2010 Pro, проект в WinForms.

Пожалуйста, помогите.Заранее спасибо.

1 Ответ

1 голос
/ 02 марта 2012

Нет.но если элементы управления находятся в форме, а форма удаляется, это действительно не имеет значения ...

То, на что вы должны обращать внимание, - это когда формы / элементы управления подключаются к длинным конечным службамбег (одиночные игры и т. д.) Вы должны следить, потому что событие может / сработает, даже если элемент управления / форма расположены.Если обработчик делает что-то, предполагающее, что пользовательский интерфейс все еще присутствует (т. Е. Не утилизируется) - у вас возникнут проблемы ...

...