2017-02-19 96 views
0

我有一个应用程序,我打算记下日志文件中的代码内发生的一切。所以为此,我做了一个名为FileCreation的wpf项目,我只是简单地创建一个文件,然后将数据附加到它。我也想在应用程序启动时保存数据。以下是代码:错误:构造函数的调用

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


     } 
    } 
} 

所以在上面的代码中,我创建了一个功能Log它接受字符串数据作为参数。如果文件没有被创建,它会创建一个文件,然后将数据追加到它。我也想记录应用程序何时开始,所以我也想写它。因此,在InitializeComponent();之后包含Log(),因为我认为这是应用程序启动时初始化的第一件事。但它给我下面的错误:

enter image description here

我知道为什么这个错误是在启动它不知道什么是Log()功能,因为未来。但是,然后在哪里定义它。我也有一个问题。我首先在我的系统上测试它,并且它工作正常。当我在其他系统上测试它时,只有它给了我这个错误。

为什么它在我的系统中没有给我这个错误?

我该如何在我的代码中处理它?

+0

是否有内部异常? –

+0

@YacoubMassad如何检查它。? –

+0

你可以在Visual Studio中调试你的应用程序吗?在调试时,您应该能够查看包括内部异常在内的异常的详细信息。 –

回答

1

您没有足够的权限写入驱动器C:\或目录C:\Logs\不存在。

为了确保这些都是问题与否,打开例外设置Debug.Windows菜单并检查所有的复选框。

请注意,此异常显示由于未处理的异常而导致MainWindow构造函数的初始化失败。您还可以检查Exception窗口的InnerException部分,以查看代码的错误。

编辑

How can I handle it in my code

您应该处理Dispatcher.UnhandledException方法,例如之前在主窗口InitializeComponent();线。要做到这一点,写:

Dispatcher.UnhandledException += OnDispatcherUnhandledException; 

这就需要下面的方法:其中

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

ShowError尝试过打印内部异常:

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

希望它能帮助。

+0

请参阅此链接[Visual Studio 2015中的异常设置](https://blogs.msdn.microsoft.com/visualstudioalm/2015/02/23/the-新的异常的设置窗口,在视觉工作室2015 /) – Ron