我目前正在处理一个处理数据库中的数据的WPF应用程序,当我用1000行左右的测试数据库测试它时,它工作正常,但现在我要处理大约50000行,并且在处理过程中只是崩溃我“”应用程序“遇到了问题,需要关闭......您是否想向微软发送错误报告......”。WPF应用程序遇到问题,需要关闭,如何获得好消息?
现在这可能看起来像是其他一些问题的重复,但我已经尝试了AppDomain.CurrentDomain.UnhandledException,AppDomain.CurrentDomain.ProcessExit,Application.DispatcherUnhandledException,它只是崩溃而没有消息。
这里是什么样子:
private void OnStartup(object sender, StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException += (s, args) =>
{
MessageBox.Show("Message1");
};
AppDomain.CurrentDomain.ProcessExit += (s, args) =>
{
MessageBox.Show("Message2");
};
this.DispatcherUnhandledException += (s, args) =>
{
MessageBox.Show("Message3");
};
try
{
Views.MainView view = new Views.MainView();
view.DataContext = new ViewModels.MainViewModel();
view.ShowDialog();
}
catch (Exception exception)
{
MessageBox.Show(exception.ToString());
}
}
的处理都可以通过命令启动(使用命令绑定一个GUI按钮来调用这个):
public void Process()
{
Thread workerThread = new Thread(new ThreadStart(DoProcess));
workerThread.IsBackground = true;
workerThread.Start();
}
private void DoProcess()
{
try
{
// Most probably crashes during that
DoStuff();
}
catch (Exception e)
{
System.Windows.MessageBox.Show(e.ToString());
}
}
我执行期间检查内存使用情况它永远不会超过70兆,所以这应该不成问题。我使用2个COM组件,一个是.exe,另一个是.dll,我不知道是否会有问题。请注意,有时这些组件会崩溃,而且当它发生时我会收到一条有用的错误消息。我使用NHibernate从数据库读取/写入数据。
现在我完全不知道问题是什么(DoStuff()部分是相当大的),我不明白错误是如何通过所有这些异常处理程序,并只是在没有信息的情况下使应用程序崩溃。请注意,我无法在Visual Studio中调试应用程序,因为我在没有安装Visual Studio的虚拟机上运行应用程序(并且我一直在等待2个月让我的IT部门安装我的sql服务器,以便我可以在我的电脑上运行我的应用程序)。
任何帮助,将不胜感激!
我会尽力答复 – Carl
这没有奏效。我只是尝试编写File.Create(“C:\\ dumpFile.txt”)而不是MessageBox.Show,但该文件仍未创建,并且仍然遇到应用程序崩溃。 – Carl
这可能意味着另一个线程崩溃,这就是为什么你的catch不起作用。将日志记录代码添加到您的应用,以缩小崩溃的位置。 –