Программа закрытия, прежде чем она действительно закончена

StackOverflow https://stackoverflow.com/questions/3817019

  •  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, чтобы промыть его кеш.

Другие советы

Запустите его в режиме командной строки в отладчике, чтобы увидеть, если исключение бросается или поместите попытку.

Если исключение становится необработанным в любом потоке процесса, весь процесс внезапно прекращается.

Также убедитесь, что вы закрываете какие-либо файлы или потоки, которые вы пишете в систему. Большинство файла ввода / вывода в наши дни буферизованы в эти дни, и если вы не закрываете поток правильно, на который стоимость последнего буфера не может быть привержена к устройству вывода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top