Invoke или BeginInvoke не могут быть вызваны для элемента управления, пока не будет создан дескриптор окна

У меня есть метод расширения SafeInvoke Control, похожий на тот,Грег Д. обсуждает здесь (минус проверка IsHandleCreated).

Я звоню сSystem.Windows.Forms.Form следующее:

public void Show(string text) {
    label.SafeInvoke(()=>label.Text = text);
    this.Show();
    this.Refresh();
}

Иногда (этот вызов может происходить из разных потоков) это приводит к следующей ошибке:

System.InvalidOperationException произошло

Message= "Invoke или BeginInvoke не могут быть вызваны для элемента управления, пока не будет создан дескриптор окна."

Source= "System.Windows.Forms"

StackTrace:
at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
at System.Windows.Forms.Control.Invoke(Delegate method)
at DriverInterface2.UI.WinForms.Dialogs.FormExtensions.SafeInvoke[T](T control, Action`1 action) 
in C:\code\DriverInterface2\DriverInterface2.UI.WinForms\Dialogs\FormExtensions.cs:line 16

Что происходит и как мне это исправить? Я знаю столько, сколько это не проблема создания формы, так как иногда она будет работать один раз и в следующий раз потерпит неудачу, так в чем же может быть проблема?

PS. Я действительно ужасно на WinForms, кто-нибудь знает хорошую серию статей, которые объясняют всю модель и как с ней работать?

Ответы на вопрос(9)

Ваш ответ на вопрос