2010-09-28 57 views
3

我有一个程序有两种模式:GUI & Just Run。 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

有没有线程在使用? – PostMan 2010-09-28 21:05:43

+0

没有线程。我将编辑添加写入方法,就像我再次接近代码时一样lol – WernerCD 2010-09-28 22:42:49

回答

2

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

如果它写到文件,添加一个Logs.Close()什么的。您必须关闭FileStream以刷新其缓存。

+0

不会在应用程序的退出时刷新吗? – PostMan 2010-09-28 21:37:01

+0

@ Postman:不,没有保证。 – 2010-09-28 21:47:32

+0

Hrm ...不要以为我在任何地方都有StreamWriter.Close。我必须尝试,并不认为它会“冲洗”东西 – WernerCD 2010-09-28 22:47:24

2

它运行在一个调试器命令行模式,看看是否被抛出一个异常,或者把周围的代码在try..catch在OnStartup程序。

如果一个异常中的过程的任何线程变为未处理的,整个过程被突然终止。

另外,还要确保你正在关闭的任何文件或流的是你正在写的日志。大多数文件I/O现在都被缓冲了,如果你没有正确地关闭数据流,那么最后一个缓冲区的数据可能不会被提交给输出设备。

相关问题