Tengo un método de extensión SafeInvoke Control similar al que Greg D analiza aquí (menos la verificación IsHandleCreated).
Lo estoy llamando de la System.Windows.Forms.Form
siguiente manera:
public void Show(string text) {
label.SafeInvoke(()=>label.Text = text);
this.Show();
this.Refresh();
}
A veces (esta llamada puede provenir de una variedad de hilos) esto da como resultado el siguiente error:
System.InvalidOperationException
ocurrió
Message
= "No se puede llamar a Invoke o BeginInvoke en un control hasta que se haya creado el identificador de ventana."
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
¿Qué está pasando y cómo lo soluciono? Sé que no es un problema de creación de formularios, ya que a veces funcionará una vez y fallará la próxima vez, entonces, ¿cuál podría ser el problema?
PD. Realmente soy horrible en WinForms, ¿alguien conoce una buena serie de artículos que explique todo el modelo y cómo trabajar con él?