程序在它真正完成之前关闭

时间:2010-09-28 21:00:07

标签: c# command-line-tool

我有一个有两种模式的程序: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,它不应该在此之前结束)。

2 个答案:

答案 0 :(得分:2)

在调试器中以命令行模式运行它以查看是否抛出异常,或者在OnStartup例程中的代码周围放置try..catch。

如果在进程的任何线程中未处理异常,则整个进程将突然终止。

还要确保关闭要写入日志的任何文件或流。这些天大多数文件I / O都被缓冲,如果你没有正确关闭流,最后缓冲区的数据可能不会提交给输出设备。

答案 1 :(得分:2)

  

日志是一个简单的“写入控制台,写入文件”方法。

如果写入File,则添加Logs.Close()或其他内容。您必须关闭FileStream以刷新其缓存。