OnClosing ハンドラーでかなりのクリーンアップを行う必要があるため、アプリがハングしているように見えます。
マーキー スタイルのプログレス バーで小さなダイアログを表示して、ユーザーがまだ「機能している」ことを少なくとも知るにはどうすればよいですか?
基本的に、ダイアログを開始し、すべてのシャットダウン手順を続行し、それが完了したら進行状況ダイアログを閉じます。
これを実現するには多くの方法がありますが、次のようになります。
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
Form dlg=null;
ThreadPool.QueueUserWorkItem(state => {
dlg = new ShuttingDownUI();
dlg.ShowDialog();
});
// do hard work with saving and stuff
if (dlg != null)
{
dlg.BeginInvoke((Action) dlg.Close);
}
}
ProgressBar
フォームの OnClosing メソッドで、Style
プロパティが に設定された を含む別のスレッドで「シャットダウン ダイアログ」を開きますMarquee
。次に、保存/終了手順を実行し、終了したら、「シャットダウン」ダイアログを閉じます。
重要なことは、マーキーを含むフォームは、作業が行われているスレッドとは別のスレッドにある必要があるということです。そうしないと、アニメーション化されず、アプリは応答していないように見えます。
次のようなことを試しましたか:
private void Form1_FormClosing( object sender, FormClosingEventArgs e )
{
using ( Form2 myForm2 = new Form2() )
{
myForm2.Show();
//Do your stuff here
myForm2.Close();
}
}