奇怪的未经处理的WPF异常
我有一个WPF应用程序,我要求用户连接到数据库的一些设置,而不是连接到数据库(使用NHibernate),如果一切正常,我显示我的主视图。 如果连接出现错误,我想告诉用户错误是什么,并让他重试。 这里有一些简单的代码正在做我想做的事情:
编辑:
看来问题不仅在于NHibernate。 如果我只是在这里运行简单的应用程序,我会在构造函数中得到未处理的异常。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
bool retry;
do
{
retry = false;
Window1 view = new Window1();
try
{
throw new Exception("Test message");
view.ShowDialog();
}
catch (Exception iException)
{
MessageBox.Show(iException.ToString());
retry = true;
}
finally
{
view.Close();
}
}
while (retry);
}
}
我得到和未处理的异常,它给了我我的测试消息,所以它确实是我的异常(即使它在try / catch块内)。 如果我在得到异常时中断,它会告诉我它发生在Window1的构造函数中。 Window1不包含任何绑定或控件。 它只是在Visual Studio 2008中创建新的WPF应用程序时创建的基本Window1。我在2台计算机上再现了此错误(只需创建一个新的WPF应用程序并将此代码粘贴到App.xaml.cs中)
谢谢大家的帮助
我通过创建窗口一次(在循环之前)解决了这个问题。 不是在finally块中关闭它,而是调用Hide,并且仅在循环后关闭它。
可能会发生任何数量的异常,并且不会发布异常详细信息,这很难诊断。
如果我猜测,我的猜测是那个view.Close()抛出,因为你说它没有被捕获。
尝试在你的catch语句中调用session.clear()。
Nhibernate将继续缓存SQL,直到写入数据库(刷新)。 如果你有问题(例外),它不会在发生异常时抛出它,而是会话被刷新(当它试图将SQL写入数据库时)。
发布NHibernate异常,我可以在这方面取得成功。
链接地址: http://www.djcxy.com/p/51231.html