我有一个应用程序,我打算在日志文件中写下代码中发生的所有事情。为此,我创建了一个名为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();
,因为我认为这是应用程序启动时初始化的第一件事。但它给了我以下错误:
我知道为什么会出现这个错误,因为在启动时它不知道什么是Log()
函数。但后来在哪里定义它。我也有一个问题。我首先在我的系统上测试它,它运行得很好。当我在其他系统上测试它时,只有它给了我这个错误。
为什么它没有在我的系统上给我这个错误。?
我如何在我的代码中处理它。?
答案 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);
}
希望它有所帮助。