2010-11-23 7 views
1

Ich habe ein einfaches Programm. Seine Aufgabe ist es, Dateien von A nach B zu verschieben (eine verklärte Fledermaus-Datei ehrlich).C# WPF App stürzt am Ende

Das Problem, das ich habe, ist, dass es ... am Ende abstürzt.

App.xaml.cs:

<Application x:Class="app.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:properties="clr-namespace:app.Properties" 
      StartupUri="Views\MainWindow.xaml"> 
    <Application.Resources> 
     <properties:Settings x:Key="Settings" /> 
    </Application.Resources> 
</Application> 

App.CS:

using System.ComponentModel; 
using System.Linq; 
using System.Windows; 
using app.Model; 
using app.Properties; 
using app.Views; 

namespace app 
{ 
    public partial class App 
    { 
     protected override void OnStartup(StartupEventArgs e) 
     { 
      base.OnStartup(e); 
      string xmlDoc = Settings.Default.Config; 
      var parms = new MoveFilesParams(xmlDoc); 
      Process.MoveFiles(parms); 
     } 
    } 
} 

Einfacher Körper. Angenommen, ich übergebe es keinen Befehlszeilenparameter, es soll nur automatisch ausgeführt werden. Mit Parametern wird das WPF ausgeführt.

Es ruft Einstellungen aus dem xmlDoc ab, die in den Anwendungseinstellungen eingetragen sind. Diese Einstellungen werden dann über die Parms-Klasse übergeben. Dann wird es entweder ausgeführt, oder popu

Wenn ich ausgeführt habe, habe ich versucht versucht/fangen ohne Fehler in der OnStartup - und es nach dem OnStarup-Block mit einer NullReferenceException Fehler.

Edit 1: Entschuldigung, wenn ich nicht schnell genug antworte (Yay für ungeduldige Leute, die abheben, weil sie ungeduldig sind), aber ich habe die Hintergrund-Worker-Teile entfernt, da ich das gerade jetzt nicht verwende. Ich bekomme immer noch den gleichen Null-Fehler am Ende. Code wurde aktualisiert, um die Entfernung von BackgroundWorker zu reflektieren.

Edit 2: Der GUI-Aspekt von App.cs entfernt (da Hintergrundarbeiter und GUI sekundärer ATM ist). Also das Programm, wie der gerade jetzt, einfach

  • Lasten
  • zieht xml Lage von app.config
  • Lasten Parm Klasse von XMLDoc
  • verschiebt Dateien erfolgreich
  • stürzt mit Nullreferenceexception war nicht behandelter Fehler . Ich kann alles kommentieren und es erros auf „Finish“ von OnStart
+0

Bitte post complete code – TalentTuner

+0

Was machen Ihre MoveFilesParams?Der Grund, warum ich frage ist, dass ich vermute, dass Sie diesen BackgroundWorker Thread ausspinnen, aber Ihre Methode kehrt sofort zurück, doch das Verhalten erscheint Asynch? –

+0

-1 für keine Kommentare von anderen Benutzern hinzugefügt – TalentTuner

Antwort

1

Wenn Ihr Haupt Thread beendet vor dem Hintergrund Aufgabe abgeschlossen ist, und wenn Background schafft ein background thread (ich glaube, es funktioniert, aber nicht 100% sicher) Wenn der UI-Thread beendet wird, wird der Hintergrund-Thread aggressiv heruntergefahren.

Versuchen Sie, den Hauptthread so lange laufen zu lassen, bis Sie sicher sind, dass der BackgroundWorker abgeschlossen ist, und prüfen Sie, ob er weiterhin abstürzt. Wenn nicht, dann haben Sie das Problem gefunden.

+0

Ich habe den Hintergrundarbeiter entfernt (Seit ich arbeite an dem automatischen Prozess mehr als die gui atm). Gleicher Fehler. – WernerCD

+0

Nicht genau die "Antwort", aber es brachte mich dazu, über den Hintergrundarbeiter (und anderen Müll) zu ziehen, bis ich die richtige Linie herausgefunden hatte, die ich ziehen musste. – WernerCD

0

WPF Command Line

ich diese Frage benutzt hatte (oder sehr ähnlich) meine WPF Befehlszeile einrichten. Das Problem muss erschienen sind, wenn ich die Anwendung wieder aufgebaut und nicht entfernen Sie

StartupUri="Views\MainWindow.xaml" 

Was bedeutete, dass, nachdem der Prozess lief, es würde versuchen, eine nicht initialisierte Objekt zuzugreifen einen Null-Ausnahmefehler geben.

Zumindest bin ich sicher, dass das das Problem ist. Das Entfernen von StartupUri entfernt dieses Problem (obwohl ich jetzt einen anderen Fehler habe, über den ich vielleicht eine neue Frage stellen könnte).