我目前正在处理一个处理数据库中数据的WPF应用程序,当我用一个大约1000行的测试数据库测试它时,它工作正常但现在我想要处理大约5万行,它只是在处理过程中崩溃给我“'应用程序'遇到了问题,需要关闭...你想向Microsoft发送错误报告......”。
现在这看起来像是其他几个问题的重复,但我已经尝试了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的VM上运行应用程序(我已经等了2个月让我的IT部门安装我的SQL服务器,以便我可以在我的电脑上运行我的应用程序。)
任何帮助将不胜感激!
答案 0 :(得分:1)
您的DoProcess功能位于后台线程中。另一个线程可能崩溃,或者你可能有一个问题从后台线程调用MessageBox,因为它不是UI线程 - 所以你可能会得到一个异常,然后由于MessageBox调用而从catch中抛出一个新的异常。尝试插入代码以在MessageBox调用之前将消息写入文件并查看是否有效,或者甚至是Console.Beep()并监听它:-)如果没有发现任何内容,请尝试将日志语句添加到文件中代码中的许多地方,直到你缩小发生崩溃的地方为止。
答案 1 :(得分:0)
您确实需要设置Visual Studio和调试器。没有它你就会在黑暗中探索。