質問: true; webBrowser2.Navigate("https://"); } catch (Exception w) when (w is ObjectDisposedException || w is InvalidOperationException || w is ArgumentOutOfRangeException) { Task.Delay(1000).Wait(); } } void MyClock1() { //「セキュリティの警告」ダイアログがもしあればを承認する文 } void MyClock2() { //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文 } void MyClock3() { //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文 } void MyClock4() { //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文 } private void button2_Click(object sender, EventArgs e) { //アプリケーションを終了させる(フォームのみ残してその他処理は終了させたい) backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { Application.Exit(); } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Application.Exit(); } public bool OpenWebWait() { try { //読み込み完了まで待つ while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete) { //無処理 System.Windows.Forms.Application.DoEvents(); System.Threading.Thread.Sleep(300); } return true; } catch (Exception ex) { return false; } } } }
回答: フォームやボタン操作などの表示ブロックと、ダウンロード動作などの実処理ブロックは分離させるようにしましょう ダイアログ表示やらログ出力はデリゲートで登録するようにする、とかで、そのブロックを別クラスで独立させてしまいます。そうすれば、わざわざフォームだけを残す、という考え方しなくて済みます