Программа закрытия, прежде чем она действительно закончена
-
26-09-2019 - |
Вопрос
У меня есть программа с двумя режимами: GUI и просто бегите. GUI загружает форму WPF и позволяет мне настроить настройки, а просто запустите нагрузки, указанные настройки и просто ... хорошо ... работает.
Это прославленный, настраиваемый инструмент для файлов Batch-Move.
Проблема: «Журнал» не заканчивается. Похоже, что он все еще пишет, пока программа закрывается, таким образом отрезавшись от конца журнала.
Основное тело приложения:
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 ... else только работает.
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.");
}
Logs - это простая «запись в консоль, запись в файл». Я рисую через мой список обработанных файлов, нахождение предметов, которые не используются ... ака «не найден». До того, как он заканчивает список, и напишите плавник, он закрывается.
Мне озадачено. Как я могу остановить файл с закрытия перед заканчиванием WriteLogend (поскольку, Afaik, он не должен быть в любом случае, прежде чем тогда).
Решение
Logs - это простая «запись в консоль, запись в файл».
Если он пишет в файл, добавьте журналы. Цифра () или что-то. Вы должны закрыть FileStream, чтобы промыть его кеш.
Другие советы
Запустите его в режиме командной строки в отладчике, чтобы увидеть, если исключение бросается или поместите попытку.
Если исключение становится необработанным в любом потоке процесса, весь процесс внезапно прекращается.
Также убедитесь, что вы закрываете какие-либо файлы или потоки, которые вы пишете в систему. Большинство файла ввода / вывода в наши дни буферизованы в эти дни, и если вы не закрываете поток правильно, на который стоимость последнего буфера не может быть привержена к устройству вывода.