C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■103935 / 6階層)  FormClosingでセーブするが稀に最後まで書込まれない
□投稿者/ 魔界の仮面弁士 (3912回)-(2026/05/14(Thu) 11:41:03)
No103934 (Azulean さん) に返信
> ・FormClosing はキャンセル確認をするためのタイミングであり、終了は確定していない。
>  →たとえば、Windowsシャットダウンの場合、FormClosingの後、他のアプリでシャットダウンをキャンセルしたら、「閉じません」(FormClosedが発生しない)。
UserClosing 等が契機なら、いったんキャンセルしておいて保存完了後に再終了する手もありますが、
TaskManagerClosing や WindowsShutDown などを考えると、望ましくは無いでしょうね。


>>アプリケーションでは、データと状態を頻繁に保存することをお勧めします。たとえば、ユーザーが開始した保存操作の間にデータを自動的に保存して、シャットダウン時に保存するデータの量を減らします。
新規ファイルではなく上書き保存が必要な場合、アイドル時には別ファイルに残しておいて、
終了時にそれを File.Replace で入れ替えるパターンもありますね。
既に作成しておいたファイルとの置換だけなら短い時間で終わるので。
(File.Replace での置換は atomic に行われるため、破損の危険性が抑えられる)


No103933 (Tom さん) に返信
> フォームクローズ(×ボタン押下)でメイン画面をハイドして見た目はすぐに終わったようなふりをしているのが不味いのかなぁ
Stream はいつ開いて、いつ閉じていますか?
頻繁に開いたり閉じたりを繰り返しているのか、
それともアプリが起動している間、共有あるいは排他で開き続けているのか。

FormClosing 以外の箇所では一切操作されないファイルなのでしょうか?
それとも、Form 内の他の箇所でも使われているファイルでしょうか?

頻繁に開いたり閉じたりを繰り返しているのであれば、編集モードでファイルを開き続けておき、
「50万件出力」と「数十行出力」部が、同一の Stream インスタンスに対して
処理されるようにすれば、50万部だけが欠損するようなことを防げる気がします。
同一スレッドからの出力であるならば。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[5]: FormClosingでセーブするが稀に最後まで書込まれない /Azulean →Re[7]: FormClosingでセーブするが稀に最後まで書込まれない /Tom
 
上記関連ツリー

FormClosingでセーブするが稀に最後まで書込まれない / Tom (26/05/05(Tue) 11:26) #103927
Re[1]: FormClosingでセーブするが稀に最後まで書込まれない / 魔界の仮面弁士 (26/05/05(Tue) 17:57) #103929
  └ Re[2]: FormClosingでセーブするが稀に最後まで書込まれない / 魔界の仮面弁士 (26/05/05(Tue) 18:53) #103930
    └ Re[3]: FormClosingでセーブするが稀に最後まで書込まれない / Tom (26/05/06(Wed) 13:09) #103931
      └ Re[4]: FormClosingでセーブするが稀に最後まで書込まれない / Tom (26/05/13(Wed) 20:50) #103933
        └ Re[5]: FormClosingでセーブするが稀に最後まで書込まれない / Azulean (26/05/13(Wed) 22:06) #103934
          └ FormClosingでセーブするが稀に最後まで書込まれない / 魔界の仮面弁士 (26/05/14(Thu) 11:41) #103935 ←Now
            └ Re[7]: FormClosingでセーブするが稀に最後まで書込まれない / Tom (26/05/16(Sat) 12:54) #103936

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信