尝试读取或写入受保护的内存。 当我调用openfileDialog的showDialog方法时

最近在我的项目中,当我调用OpenFileDialog ShowDialog方法时,我收到此错误:

“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

我之前一直在网上搜索,但我的问题没有解决。 我也安装了microsoft补丁,但因为我的项目是在.Net 3.5中,所以没用。

代码示例:

 OpenFileDialog OFD = new OpenFileDialog(); OFD.ShowDialog(); 

谢谢你的帮助。

OpenFileDialog将大量非托管代码加载到您的进程中。 您在计算机上安装的所有shell扩展。 其中一个人对您的过程环境不满意,或者对您的过程感到困惑,足以使其崩溃和燃烧。

您需要找到导致此问题的shell扩展。 从Project + Properties,Debug选项卡开始,勾选“启用非托管代码调试”选项。 您现在将看到在“输出”窗口中加载的DLL列表。 在获得例外之前看到的最后一个是麻烦制造者的可能性是合理的。 虽然您仍然需要将DLL名称反向工程为shell扩展名。

另一种方法是削减和燃烧。 使用SysInternals的AutoRuns实用程序。 单击“资源管理器”选项卡,然后禁用Microsoft未创建的任何内容。 在superuser.com上提出更多相关问题

我也有这个问题。

我使用OpenFileDialog选择Excel文件,然后使用.net Oledb读取数据并将数据写入Access数据库。

第一次:好的

第二次,在选择文件之后,出现此消息:尝试读取或写入受保护的内存

我的解决方案

带有OpenFileDialog的表单“A”和用于显示和选择文件的按钮,并且:openFileDialog1.ReadOnlyChecked = true; openFileDialog1.ShowReadOnly = true;

表单“B”使用get / set将文件名设置为read读取excel文件并写入Access db的方法。

从“A”,发送文件名读取到“B”forms加载“B”forms,执行主进程,查看结果和关闭表单返回“A”,我可以选择另一个文件并重复该过程没有错误

不再“尝试读取或写入受保护的内存”错误

我不知道它是否是最佳解决方案,但应用程序运行良好。

问候

这解决了我的问题。 在连接字符串中添加OLE DB Services=-1然后它的工作。

像这样:

 Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DbTest\Test.accdb; OLE DB Services=-1 

或者如此链接所示