我有一个有两种模式的程序:GUI&赶紧跑。 GUI加载一个WPF表单,让我调整设置,而Just Run加载所述设置,只是......好......运行。
这是一个美化,可自定义的批量移动文件工具。
问题:“日志”没有完成。程序关闭时似乎还在写,因此切断了日志的结束。
主要应用程序正文:
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.");
}
日志是一个简单的“写入控制台,写入文件”方法。我通过我的已处理文件列表进行迭代,找到未使用的项目...又名“未找到”。在它结束列表并写入Fin之前,它会关闭。
让我感到困惑。如何在WriteLogEnd完成之前停止文件关闭(因为,afaik,它不应该在此之前结束)。
答案 0 :(得分:2)
在调试器中以命令行模式运行它以查看是否抛出异常,或者在OnStartup例程中的代码周围放置try..catch。
如果在进程的任何线程中未处理异常,则整个进程将突然终止。
还要确保关闭要写入日志的任何文件或流。这些天大多数文件I / O都被缓冲,如果你没有正确关闭流,最后缓冲区的数据可能不会提交给输出设备。
答案 1 :(得分:2)
日志是一个简单的“写入控制台,写入文件”方法。
如果写入File,则添加Logs.Close()或其他内容。您必须关闭FileStream以刷新其缓存。