Ho riscontrato un problema con un'applicazione Windows Form.Cosa c'è di sbagliato nella mia chiamata cross-thread in Windows Form?
Un modulo deve essere visualizzato da un altro thread. Quindi, nella classe del form, ho il seguente codice:
private delegate void DisplayDialogCallback();
public void DisplayDialog()
{
if (this.InvokeRequired)
{
this.Invoke(new DisplayDialogCallback(DisplayDialog));
}
else
{
this.ShowDialog();
}
}
Ora, ogni volta che ho eseguito questo, un InvalidOperationException
è gettato sulla linea this.ShowDialog();
:
"operazione cross-thread non valida: Controllo 'SampleForm' accessibile da un thread diverso dal thread su cui è stato creato. "
Cosa c'è di sbagliato in questo pezzo di codice? Non è un modo valido per effettuare chiamate cross-thread? C'è qualcosa di speciale con ShowDialog()
?
Per curiosità, che cosa IsHandleCreated show? –
@Marc Gravell: IsHandleCreated è falso. Quindi, naturalmente, come hanno detto diverse persone, il codice è in esecuzione prima che il modulo venga mostrato. –