0

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

错误说:

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

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

在 Stack Overflow 上的其他一些问题中,有一个建议是取消选中调试选项中的“在模块加载时抑制 JIT 优化”。我也试过了,但这并没有解决我的问题。

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

4

1 回答 1

0

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

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

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

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

于 2012-05-23T23:01:39.190 回答