1

メッセージ ボックスをモーダルにしようとしていますが、スレッドの問題が発生しています。

私はこのようなクラスを持っています:

public static class DisplayMessage()
{
    public static void ErrorMessage(string errorMessage)
    {
         MessageBox.Show(errorMessage, "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);
    }
    //other similar methods
}

だから私はメッセージボックスをメインフォームにモーダルにしたい. MessageBox.Show は、 IWin32Windowを指定できるようにオーバーロードされています。だから私は.ActiveFormを使ってみましたが、私はこれを取得します:

クロススレッド操作が無効です: コントロールが作成されたスレッド以外のスレッドからアクセスされました。

4

2 に答える 2

5

これを試して:

    public static void ErrorMessage( Form Parent, string errorMessage )
    {
        if ( Parent != null && Parent.InvokeRequired )
            Parent.Invoke( (Action)(() => MessageBox.Show( errorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error )) );
        else
            MessageBox.Show( errorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
    }
于 2012-09-26T13:17:51.647 に答える