0

アプリケーションでアラート ボックス (ダイアログ フォーム) を表示する必要があるという要件があります。問題は、最新のアラートが最初に表示され、それを閉じると次のアラートが表示されるということです。そこで、残りのコードを実行するためにスレッドを閉じる必要がないように、ダイアログの作成を別のスレッドに移動することにしました。

以下のようなことをしました。しかし、問題は、それらがダイアログとして表示されないことです (それらを閉じずにメインフォームに移動できます)。だから私は使用することにしましたShowDialog(IWin32Window) しかし、それは私にクロススレッド操作無効なエラーを与えます。

このケースをどのように処理しますか?

private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 3; i++)
            {
                new Thread(new ThreadStart(ShowDialogue)).Start();
                Thread.Sleep(1500);
            }
        }


 private void ShowDialogue()
        {          
                FormDialogue fd = new FormDialogue(-1);
                fd.ShowDialog( ); 

        }
4

2 に答える 2

0

あなたの質問から、結果の「ダイアログスタック」をモーダルにしたいようです(一度に1つのダイアログを表示し、メインフォームに戻るにはすべてを閉じる必要があります)。

スレッドを使用しないことをお勧めしますが、ShowDialogを直接使用してループを実行するだけです。例えば:

private void button2_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 3; i++)
    {
        FormDialogue fd = new FormDialogue(-1);
        fd.ShowDialog();
    }
}

上記の優先度に従って処理するアラートのリストを保持する必要があります。

ただし、アラートダイアログが非常に多い場合、ユーザーはこのアプローチをあまり好まないことに気付くと思います。また、すべてのアラートを一度に表示する単一のダイアログに戻る可能性があります。

もう1つの選択肢は、すべてのアラート情報(おそらくリスト内)を単一のダイアログに送信し、そのダイアログで[OK]ボタンを使用して、完了するまでアラートを表示するリストを繰り返し処理することです。

どちらの方法も非常に単純なはずです。

于 2013-01-30T13:21:51.153 に答える
0

fd.Show()メイン フォームを使用できるようにする場合は、代わりに使用fd.ShowDialog()します。スレッドは必要ありません。

于 2013-01-30T13:14:53.000 に答える