メッセージボックスが別のスレッドに表示されているようです。メインUIスレッドでMessageBox.Showを呼び出すことを確認する必要があります。以下は、これを実現する方法を示すコードスニペットです。
public class FooForm: Form
{
//This is just a button click handler that calls ShowMessage from another thread.
private void ButtonShowMessage_Click(object sender,EventArgs e)
{
//Use this to see that you can't interact with FooForm before closing the messagebox.
ThreadPool.QueueUserWorkItem(delegate{ ShowMessage("Hello World!");});
//Use this (uncomment) to see that you can interact with FooForm even though there is a messagebox.
//ThreadPool.QueueUserWorkItem(delegate{ MessageBox.Show("Hello World!");});
}
private void ShowMessage(string message)
{
if( InvokeRequire)
{
BeginInvoke(new MethodInvoker( () => MessageBox.Show(message)));
}
else
{
MessageBox.Show(message);
}
}
}
複数のUIスレッドがあり、そのうちの1つがメッセージボックスをポップする場合、そのメッセージボックスをUI全体でモーダルにするシナリオはないと想定しています。これはもっと複雑なシナリオです。