由于SQLite,ShowFialDialog上的ShowDialog调用崩溃了WPF应用程序

时间:2016-07-19 07:38:02

标签: c# wpf sqlite visual-studio-2015

我正在使用Visual Studio 2015开发WPF应用程序(x64,.Net 4)。作为应用程序主页的一部分,我有一个打开文件浏览器的按钮。

Button Click事件如下......

openFileDialog.InitialDirectory = Environment.SpecialFolder.Personal.ToString();
openFileDialog.Title = "Select Profile Configuration Files";
openFileDialog.Filter = "Profile Config Files (*.cfg)|*.cfg|All files (*.*)|*.*";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;

if (openFileDialog.ShowDialog() == true)
{
     try
     {
         _LoadConfigProfile(openFileDialog.FileName.ToString());
     }
     catch (Exception ex)
     {
         MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message, "Error Opening Prfile", MessageBoxButton.OK, MessageBoxImage.Error);
     }
}

但是,每次我点击按钮时,文件浏览器都会打开,但是在一秒钟之内,应用程序就会崩溃。 使用断点,我发现崩溃发生在openFileDialog.ShowDialog()行。

VS2015中显示的错误如下

Error Window

Call Stack如下 Call Stack

作为应用程序的一部分,我使用SQLite来处理一些数据。我在Application的开头打开了一个DataBase Connection。

以前有人遇到过这样的问题吗?我怎么解决这个问题?

如果您想了解有关应用程序和错误的更多信息,请进行评论。

1 个答案:

答案 0 :(得分:3)

在调用create OpenFileDialog对象之前,文件选择器位于WPF应用程序中可能未加载的公共控件DLL中。检查输出日志,看它此时没有加载不同的(附加的)sqlite.dll。

正如评论中所提到的,我遇到了这个问题,之前我曾避免使用文件选择器,但是我需要添加一个新的要求,并且在文件选择器对话框显示之后应用程序再次崩溃。

如果查看输出日志,它会显示sqlite源代码中的行号,如果在库已被使用时调用它,则它是sqlite3_config中的抛出异常。 在输出日志中进一步查看显示,在此异常发生之前,commoncontrols.dll和一个额外的sqlite.dll是从C:\ Program Files(x86)\ Dell Backup And Recovery \加载的 - 即不同的sqlite.dll比已经使用的,当然不是图书馆的位置,但可能是在路径的早期。我卸载了Dell备份和恢复,并且不再出现错误。