I encounter a problem with a Windows Forms application.
A form must be displayed from another thread. So in the form class, I have the following code:
private delegate void DisplayDialogCallback();
public void DisplayDialog()
{
if (this.InvokeRequired)
{
this.Invoke(new DisplayDialogCallback(DisplayDialog));
}
else
{
this.ShowDialog();
}
}
Now, every time I run this, an InvalidOperationException
is thrown on the line this.ShowDialog();
:
"Cross-thread operation not valid: Control 'SampleForm' accessed from a thread other than the thread it was created on."
What's wrong with this piece of code? Isn't it a valid way to make cross-thread calls? Is there something special with ShowDialog()
?
You're probably executing this code before the form has been shown.
Therefore, InvokeRequired
is returning false
.