错误:C# 文件夹浏览器对话框,尝试读取或写入受保护的内存

本文关键字:读取 受保护 内存 文件夹 浏览器 对话框 错误 | 更新日期: 2023-09-27 18:35:05

我正在Visual Studio 2008中开发一个使用文件夹浏览器对话框和printdialog的C#应用程序。最近,每当调用这两个对话框的方法ShowDialog()程序都遇到错误。

错误说:

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

奇怪的是,此错误仅特定于此项目。当我在新的 C# 项目中使用文件夹浏览器对话框时,它工作得很好。此外,此错误最近在上述项目中开始发生。早些时候,它曾经工作得很好。此外,当我在调试模式下从 IDE 运行程序时,不会发生此错误。

堆栈溢出的其他一些问题中,有一个建议在调试选项中取消选中"禁止模块加载时的 JIT 优化"。我也试过了,但这并没有解决我的问题。

有人可以帮我解决这个问题吗?

错误:C# 文件夹浏览器对话框,尝试读取或写入受保护的内存

如果不看到任何代码,很难说出什么。 我已经看到在创建以外的线程上访问 UI 时遇到此问题。 为了避免这种情况,如果你弄乱了来自某个线程的 UI 控件,你可以创建一个如下所示的函数。

public static void ExecuteAction(Control myControl, Action myAction) 
{
    if (myControl.InvokeRequired) { myControl.Invoke(myAction); }
    else { myAction(); }
}

然后,您只需从您想要的任何线程中调用它,其中包含控件和要执行的操作(例如,更改其颜色或其他操作)。

我没有特别看到对话框的问题,因为我很久没有对它们做任何事情了,但由于这是一个 UI 问题,并且它与我以前看到的错误消息相同,我会试一试。
您还可以检查 Control.CheckForIllegalCrossThreadCalls 的值。http://msdn.microsoft.com/en-us/library/system.windows.forms.control.checkforillegalcrossthreadcalls.aspx

相关文章: