プログラム全体がフリーズし、灰色のように有効になっています。私はそれをクリックできません。ビジュアルスタジオからクローズするだけで何もしません。デバッグを停止します。なぜフォーム全体を閉じるために右上のxをクリックすると、プログラム全体が偽を有効にするようになりますか?
私が追加した後、それは一度起動:
bool mCompleted = false;
bool mClosePending = false;
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (!mCompleted)
{
backgroundWorker1.CancelAsync();
this.Enabled = false;
e.Cancel = true;
mClosePending = true;
return;
}
base.OnFormClosing(e);
}
をOnFormClosing保護されたオーバーライドボイドを私は右上のをクリックしたときに必ず私が使用しているBackgroundWorkerのは、Form1を閉じる前に停止した作りたかったので、私はこのオーバーライドを追加しましたバツ。 backgroundworkerが動作している間に働いているのですが、backgroundworkerが実行されていないときに、プログラムを実行してxをクリックすると、プログラム全体がfalseに設定され、デバッグを停止するだけですべてシャットダウンできます。
私がやったのBackgroundWorker完了した場合には:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
}
if (e.Error != null)
{
}
else
{
mCompleted = true;
if (mClosePending) this.Close();
}
}
しかし、BackgroundWorkerのが実行されていないと私はちょうどXをクリックしたときに問題が起こります。
this.Enabled = false;
e.Cancel = true;
あなたはBackgroundWorkerのは、それが最終的に閉じます実行されていることを確認するためのチェックを追加する必要があります:あなたが効果的にフォームを閉じるのを中止し、無効にそれを残しているtrueにをキャンセルを設定することにより
さて、フォームを無効にして閉じる操作をキャンセルします。ここで何が起こると思いますか? – Steve
私は問題があると思います:this.Enabled = false; – klaymen
私は[サンプルコード](http://stackoverflow.com/a/1732361/17034)をこのような間違いに対してもう少し弾力的に変更しました。 Googleの「帰属は必須」となり、最初のヒットとなります。 –