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

时间:2011-12-08 09:09:30

标签: c# memory openfiledialog

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

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

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

代码示例:

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

像这样:

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

或如this link

所示

答案 2 :(得分:0)

我也有这个问题。

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

第一次:好的

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

我的解决方案:

表格" A"使用OpenFileDialog和一个按钮来显示和选择文件,并: openFileDialog1.ReadOnlyChecked = true; openFileDialog1.ShowReadOnly = true;

表格" B" 使用get / set设置要读取的文件名 读取excel文件并写入Access db的方法。

从" A",发送文件名以读取" B"形成 加载" B"表单,执行主进程,查看结果和关闭表单 返回" A",我可以选择另一个文件并重复该过程而不会出错

没有更多"尝试读取或写入受保护的内存"错误

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

问候