我的应用程序因此错误而崩溃:试图读取或写入受保护的内存

本文关键字:读取 受保护 内存 应用程序 错误 崩溃 我的 | 更新日期: 2023-09-27 18:16:42

我开发了一个winform应用程序(使用vs 2010 c#)。在这个应用程序中,我使用了一个com对象,这个对象有一些事件。其中之一是:

void a_Received(object sender, ReceivedEvent e)
{
    richTextBox1.Text = e.Message;
}
触发此事件的另一部分代码是这样的:
 private void btnSendMessage_Click(object sender, EventArgs e)
{
    MyComObject obj = new MyComObject();
    obj.SendCommand(txtCommand.Text);
}

所以有时候基于命令,事件同时接收到2个或更多的消息,我得到了这个异常:试图读写受保护的内存。这通常表明其他内存已损坏

如果只有一条消息(通过事件),一切都很好。

那么问题是什么呢?我能做什么?

编辑:

当接收到的所有消息在代码末尾(我的意思是在事件的}之后)处理(并且成功处理)时,将发生异常。

StackTrace:

at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageA(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at IranAir.Program.Main() in C:'Users'Administrator'Desktop'Gabriel'Program.cs:line 18 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

我的应用程序因此错误而崩溃:试图读取或写入受保护的内存

不能让两个线程同时写同一个文件。这就是为什么当你试图删除一个正在使用的文件时,Windows会弹出"这个文件正在使用中"的提示。当一个文件正在使用时,windows 保护文件不被另一个进程阻塞。您需要确保一次只写入一条消息。设置队列或检查文件是否正在使用。请看这篇文章:

是否有一种方法来检查文件是否正在使用?

相关文章: