错误:构造函数

时间:2017-02-19 15:38:44

标签: c# wpf

我有一个应用程序,我打算在日志文件中写下代码中发生的所有事情。为此,我创建了一个名为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,它接受​​字符串数据作为参数。如果未创建文件,则会创建一个文件,然后将数据附加到该文件。我还想记录应用程序何时启动,所以我还想写它。所以在Log()之后包含了InitializeComponent();,因为我认为这是应用程序启动时初始化的第一件事。但它给了我以下错误:

enter image description here

我知道为什么会出现这个错误,因为在启动时它不知道什么是Log()函数。但后来在哪里定义它。我也有一个问题。我首先在我的系统上测试它,它运行得很好。当我在其他系统上测试它时,只有它给了我这个错误。

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

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

1 个答案:

答案 0 :(得分:1)

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

为了确保这些问题与否,请在 Debug.Windows 菜单中打开异常设置并选中所有复选框。

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

修改

  

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

您应该处理Dispatcher.UnhandledException方法,例如在MainWindow中的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);
    }

希望它有所帮助。