2017-02-19 2 views
0

Ich habe eine Anwendung, in der ich vorhabe, alles, was in dem Code geschieht, in einer Protokolldatei aufzuschreiben. Also habe ich ein wpf-Projekt namens FileCreation erstellt, wo ich einfach eine Datei erstelle und dann Daten an sie anschließe. Ich möchte auch die Daten speichern, wenn die Anwendung gestartet wurde. Es folgt der Code:Fehler: Aufruf des Konstruktors

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Log("Application started on : " + DateTime.Now.ToString("dd-M-yyyy")); 
    } 

    void Log(string data) 
    { 
     string path = @"C:\\Logs\\" + DateTime.Now.ToString("dd-M-yyyy") + ".txt"; 

     if (File.Exists(path)) 
     { 
      using (StreamWriter sw = File.AppendText(path)) 
      { 
       sw.WriteLine(data); 

      } 
     } 
     else 
     { 
      StreamWriter myFile = new StreamWriter(path); 
      myFile.WriteLine(data); 
      myFile.Close(); 


     } 
    } 
} 

So in dem obigen Code, ich habe eine Funktion Log erstellt, die String-Daten als Parameter akzeptiert. Es erstellt eine Datei, wenn die Datei nicht erstellt wird, und fügt dann Daten an sie an. Ich möchte auch aufnehmen, wenn die Anwendung gestartet wurde, also dachte ich daran, es auch zu schreiben. So enthalten die Log() nach InitializeComponent();, weil ich denke, das ist das erste, was initialisiert wird, wenn die Anwendung startet. Aber es gibt mir unter Fehler:

enter image description here

Ich weiß, warum dieser Fehler kommt, weil beim Starten sie nicht wissen, was ist Log() Funktion. Aber dann, wo man es definiert. Ich habe auch eine Frage. Ich habe es zuerst auf meinem System getestet und es hat perfekt funktioniert. Als ich es auf einem anderen System getestet habe, gab es nur diesen Fehler.

Warum gab es mir diesen Fehler nicht auf meinem System.?

Wie kann ich es in meinem Code umgehen?

+0

Gibt es eine innere Ausnahme? –

+0

@YacoubMassad So überprüfen Sie es.? –

+0

Können Sie Ihre Anwendung im Visual Studio debuggen? Beim Debugging sollten Sie die Details der Ausnahme einschließlich der inneren Ausnahme anzeigen können. –

Antwort

1

Sie haben nicht genügend Berechtigung zum Schreiben in Laufwerk C:\ oder das Verzeichnis C:\Logs\ existiert nicht.

Um die Probleme stellen Sie sicher, diese sind oder nicht, öffnen Sie die Exception Einstellungen in Debug.Windows Menü und lassen Sie die Kontrollkästchen.

Beachten Sie, dass diese Ausnahme zeigt, dass die Initialisierung des MainWindow-Konstruktors aufgrund einer unbehandelten Ausnahme fehlgeschlagen ist. Sie können auch den InnerException-Teil des Ausnahmefensters überprüfen, um zu sehen, was mit dem Code nicht stimmt.

bearbeiten

How can I handle it in my code

Sie Dispatcher.UnhandledException Methode zum Beispiel vor InitializeComponent(); Zeile in Mainwindow behandeln soll. Dazu schreiben:

Dispatcher.UnhandledException += OnDispatcherUnhandledException; 

, die die folgende Methode erfordert:

void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) 
    { 
     ShowError("An application error occurred.\nPlease check whether your data is correct and repeat the action. If this error occurs again there seems to be a more serious malfunction in the application.", e.Exception); 

     e.Handled = true; 
    } 

, in dem ShowError Tries drucken zu Inneren Ausnahmen:

public static void ShowError(string message, Exception exp0) 
    { 
     Exception exp1 = exp0.InnerException; 
     Exception exp2 = exp1 != null ? exp1.InnerException : null; 
     Exception exp3 = exp2 != null ? exp2.InnerException : null; 

     string mess = "unfortunately, no message is available."; 
     string moremess = ""; 

     if (message != null) 
     { 
      mess = message; 
      moremess = exp0.Message + "\n\n"; 
     } 
     else if (exp0 != null) 
     { 
      mess = exp0.Message; 
     } 

     Exception exp = exp0.InnerException; 
     while (exp != null) 
     { 
      moremess += exp.Message + "\n\n"; 
      exp = exp.InnerException; 
     } 

     MessageBox.Show(mess + Environment.NewLine + moremess); 
    } 

Hoffen, es hilft.

+0

Siehe [Link auf Ausnahmeeinstellungen in Visual Studio 2015] (https://blogs.msdn.microsoft.com/visualstudioalm/2015/02/23/the- Neue-Ausnahme-Einstellungen-Fenster-in-Visual-Studio-2015 /) – Ron

Verwandte Themen