それは本当に完成だ前にプログラムが終了します
-
26-09-2019 - |
質問
私は2つのモードでプログラムを持っています。ただ、実行負荷が設定し、ちょうど...よく...ランを言っながらGUI負荷WPFフォームと私をすることができますが、設定を調整します。
これは、バッチ移動ファイルに見せかけ、カスタマイズ可能なツールです。
問題:「ログ」終了しません。それはまだので、ログの最後を切断すると、プログラムが閉じながら書いているように思えます。
メインアプリケーション本体ます:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
if (!e.Args.Contains("-gui"))
{
Process.SettingsPopulate();
Process.WriteLogHead();
Process.MoveFiles();
Process.WriteLogEnd();
}
else
{
new MainWindow().ShowDialog();
}
this.Shutdown();
}
}
リアルタイムシンプル。コマンドラインが-gui持っている場合、それは他のそれだけで動作します... WPFをロードします。
public static void WriteLogEnd()
{
foreach (var log in from i in Items
where i.Used == false
let build = new StringBuilder()
select build.AppendFormat("{0, -12} > {1} > Not Found", _time, i.FileName))
{
Logs(log);
}
Logs("");
Logs("Fin.");
}
ログは、単純な「コンソールへの書き込み、ファイルへの書き込み」メソッドです。 I反復処理されたファイルの私のリストスルー、使用されていないアイテムを見つける...別名「が見つかりません」。それはリストを終了し、フィンを書く前に、それが閉じます。
私は困惑しています。どのように私は(私の知る限りで、とにかく、その後前に終了できないようにする必要があり、以来)WriteLogEndが終了する前に閉じてからファイルを停止することができます。
解決
ログのメソッド「ファイルへのコンソールへの書き込み、書き込み」シンプルです。
そのファイルに書き込む場合は、Logs.Close()か何かを追加します。あなたは、そのキャッシュをフラッシュするのFileStreamを閉じる必要があります。
他のヒント
、例外がスローされているかどうか、あなたのOnStartupルーチンでコードの周りのtry..catchを置くためにデバッガでコマンドラインモードでそれを実行します。
例外は、プロセスの任意のスレッドで未処理になった場合は、、全体のプロセスが突然終了します。
も確認してください、あなたは任意のファイルやあなたがログを書いているというストリームを閉じています。ほとんどのファイルI / Oは、これらの日バッファされ、そしてあなたが近いストリームをいない場合、正しくデータの最後のバッファの価値は、出力デバイスにコミットされない場合があります。