0

MessageBox.Show イベントがあり、MessageBox が開いている間にタイマーベースのメソッドが実行されないようにしたいです。

これが私のコードです(ネットワーク上のファイルの場所の値をx分ごとに変更します):

public void offlineSetTurn()
{
    try
    {
        using (StreamWriter sWriter = new StreamWriter("FileLocation"))
        {
            sWriter.WriteLine(Variable);
        }
    }
    catch (Exception ex)
    {
        DialogResult result = MessageBox.Show("Can't find file.  Click Okay to try again and Cancel to kill program",MessageBoxButtons.OKCancel);

        if (result == DialogResult.OK)
        {
            offlineSetTurn();
        }
        else if (result == DialogResult.Cancel)
        {
            Application.Exit();
        }
    }
}

30 秒ごとにこれを呼び出すフォームのメソッドがあります。つまり、30 秒ごとに別の MessageBox がポップアップします。MessageBox でアプリケーションを一時停止する方法はありますか? そうでない場合、この問題を解決する最善の方法は何でしょうか? 可能であれば、タイマーカウントをリセットするため、Timer.Stop() の使用は避けたいと思います。

4

1 に答える 1

1

最も簡単な解決策は、メッセージ ボックスが現在開いているかどうかを示すフラグを設定することです。

private bool isMessageBoxOpen = false;

public void offlineSetTurn()
{
    if (isMessageBoxOpen)
        return;

    try
    {
        using (StreamWriter sWriter = new StreamWriter("FileLocation"))
        {
            sWriter.WriteLine(Variable);
        }
    }
    catch (Exception ex)
    {
        isMessageBoxOpen = true;
        DialogResult result = MessageBox.Show("Can't find file.  Click Okay to try again and Cancel to kill program",MessageBoxButtons.OKCancel);
        isMessageBoxOpen = false;

        if (result == DialogResult.OK)
        {
            offlineSetTurn();
        }
        else if (result == DialogResult.Cancel)
        {
            Application.Exit();
        }
    }
}
于 2011-08-25T03:08:35.597 に答える