Question

J'ai un programme avec deux modes: interface graphique et il suffit d'exécuter. charges GUI une forme WPF et me permet de régler les paramètres, alors il suffit d'exécuter des charges lesdits réglages et juste ... eh bien ... fonctionne.

Il est glorifié, outil personnalisable pour des fichiers batch déplacer.

Le problème: Le « journal » ne se termine pas. Il semble que cela continue à écrire tout le programme se ferme, coupant ainsi la fin du journal.

Corps App:

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();
    }
}

réel simple. Si la ligne de commande a -gui, il charge WPF ... sinon il passe juste.

    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.");
    }

Journaux est un simple « Ecrire à la console, écrire dans le fichier » méthode. Je itérer à travers ma liste de dossiers traités, la recherche d'objets qui ne sont pas utilisés ... autre titre: « not found ». Avant la fin de la liste, et écrire Fin, il se ferme.

M'a perplexes. Comment puis-je arrêter le fichier de fermeture avant se termine WriteLogEnd (Depuis, afaik, il ne devrait pas être en mesure de mettre fin avant cette date de toute façon).

Était-ce utile?

La solution

  

Journaux est un simple "Ecrire à la console, écrire dans le fichier" méthode.

S'il écrit dans un fichier, ajouter un Logs.Close () ou quelque chose. Vous devez fermer un FileStream pour vider son cache.

Autres conseils

Exécuter en mode ligne de commande dans un débogueur pour voir si une exception est levée, ou mettre un try..catch autour du code dans votre routine OnStartup.

Si une exception non gérée va dans un thread d'un processus, le processus se termine brusquement.

Assurez-vous que vous également de fermer tous les fichiers ou les flux que vous écrivez le journal à. La plupart des fichiers E / S est tamponne ces jours-ci, et si vous ne fermez pas le flux correctement la dernière valeur de la mémoire tampon de données ne peut être engagée au dispositif de sortie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top