Domanda

Ho un programma con due modalità: GUI & Just Run. GUI carichi una forma WPF e mi permette di regolare le impostazioni, mentre i carichi basta eseguire detto impostazioni e basta ... beh ... corre.

E 'un glorificato, strumento personalizzabile per i file in batch-move.

Il problema: il "registro" non finisce. Sembra come se fosse ancora scrivendo, mentre si chiude programma, tagliando così fuori la fine del log.

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

semplice reale. Se da riga di comando ha -gui, carica WPF ... altrimenti appena eseguito.

    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 è un semplice "Scrivi Console, scrivere nel file" metodo. Ho iterate attraverso il mio elenco di file elaborati, trovare oggetti che non vengono utilizzati ... alias "non trovato". Prima della fine della lista, e scrivere Pinna, si chiude.

mi ha perplesso. Come posso fermare il file da chiudere prima finiture WriteLogEnd (Dal momento che, per quanto ne so, non dovrebbe essere in grado di finire prima di allora in ogni modo).

È stato utile?

Soluzione

  

Logs è un semplice "Scrivi Console, Scrivi file" metodo.

Se si scrive su file, aggiungere un Logs.Close () o qualcosa del genere. È necessario chiudere un FileStream per svuotare la cache.

Altri suggerimenti

Esegui in modalità riga di comando in un debugger per vedere se un'eccezione viene gettata, o mettere un try..catch attorno al codice nella vostra routine OnStartup.

Se un'eccezione va non gestita in qualsiasi thread di un processo, l'intero processo viene terminato bruscamente.

Inoltre, assicurarsi che si sta chiudendo tutti i file o flussi che si sta scrivendo il registro. La maggior parte file di I / O è tamponato in questi giorni, e se non lo fai chiudere il flusso correttamente vale l'ultimo buffer dei dati non può essere impegnato per il dispositivo di output.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top