您当前的位置: 首页 >  c#

光怪陆离的节日

暂无认证

  • 3浏览

    0关注

    1003博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C#程序设计引入IOleMessageFilter解决程序异常

光怪陆离的节日 发布时间:2022-05-19 17:27:57 ,浏览量:3

本文介绍 C#程序设计引入IOleMessageFilter解决程序异常。

  1. 操作流程 1.1. 问题背景 在C#使用外部COM接口时可能会报错:被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED)) 根据微软官防文档解释,时因为外部线程和Visual Studio之间存在线程争用问题,解释如下所示 在这里插入图片描述

1.2. 解决方案 1.2.1. 方案1 捕捉异常,利用委托(delegate)和泛型重复执行异常的方法。 这个方案可以很完美的解决该问题,主要的思路就是捕获异常。如果获取的异常为该异常重复调用发生异常的方法,知道能够顺利调用完成为止。这个方案定义了两类泛型函数,函数的参数是委托。我们调用时就是把我们可能抛出异常的方法放到委托中通过下面类似的泛型函数进行调用。

利用委托Func进行泛型的定义 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

使用泛型的一个例子: 在这里插入图片描述

1.2.2. 引入IOleMessageFilter,从根本上杜绝这种异常情况的出现 MSDN地址:https://msdn.microsoft.com/zh-cn/library/ms228772(v=vs.120).aspx 按照微软的意思,这个异常产生的根本原因是我们自己写的程序和外部的WORD程序间线程征用所致,它定义了一个MessageFilter类继承自IOleMessageFilter来进行这些线程的管理。在它的示例代码中,还引入并打开了IDE,我想它只是为了演示MessageFilter的用法,真正能解决问题的只是在你程序的开始和结束位置分别进行MessageFilter.Register()和MessageFilter.Revoke()就可以了。

1.2.3. 引入目录权限问题 在这里插入图片描述 在这里插入图片描述

1.2.4. 操作频繁问题,在代码中加入延时。 在这里插入图片描述

1.3. 实际程序 1.3.1. IOleMessageFilter 在这里插入图片描述

1.3.2. MessageFilter 在这里插入图片描述 在这里插入图片描述

1.3.3. 实际用法 在这里插入图片描述 微软链接https://docs.microsoft.com/en-us/cpp/mfc/reference/colemessagefilter-class?view=msvc-170 在这里插入图片描述

关注
打赏
1665731445
查看更多评论
立即登录/注册

微信扫码登录

0.1019s