我正在Visual Studio 2008中开发一个使用文件夹浏览器对话框和printdialog的C#应用程序。最近,只要ShowDialog()
调用这两个对话框的方法,程序就会遇到错误。
错误说:
尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
奇怪的是,此错误仅适用于此项目。当我在新的C#项目中使用文件夹浏览器对话框时,它可以正常工作。此外,这个错误最近在上述项目中开始发生。之前它过去工作得非常好。此外,在调试模式下从IDE运行程序时,不会发生此错误。
在Stack Overflow上的其他一些问题中有一个建议取消选中"抑制模块负载上的JIT优化"在调试选项中。我也尝试过,但这并没有解决我的问题。
有人可以帮我解决这个问题吗?
答案 0 :(得分: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