4

良い一日。私は form と 1 つの backgroundworker を持っています。bw_Dowork イベントでは、MessageBox.Show() (つまり、YES?NO ボックス) を使用してメッセージを出力する必要がある場合があります。しかし、messageBox.Show() メソッドを呼び出すたびに、実行がフリーズし、フォームで選択内容 (つまり、はい/いいえ) をクリックできなくなります。作業したい場合は、メッセージが表示されるので、すばやくクリックする必要がある場合があります。そうしないと、数秒のギャップを与えるとフリーズします。MessageBox.Show() を使用するインスタンスの例を以下に示します。

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    if (fileFTP.Exists == false)
    {
        _busy.WaitOne();

        if ((worker.CancellationPending == true))
        {
            e.Cancel = true;
            return;
        }

        SetText("File Ftp.exe are missing. This file are required to preform update, please contact yout system administrator to retrive Ftp.exe", true);
        MessageBox.Show("File Ftp.exe are missing. This file are required to preform update, please contact yout system administrator to retrive Ftp.exe");
        goto ExitProgram;
    }  
}

これについてオンラインで調査したところ、MessageBox がインターフェイス スレッドに干渉しているとの指摘がありました。これにより、デリゲートを使用してメッセージをトリガーできますが、すべて役に立ちません。すべての MessageBoxes を削除する必要がありました。1つを残すと、解雇されたときに実行がフリーズします。助けていただければ幸いです。

4

1 に答える 1