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

本文介绍 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
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光怪陆离的节日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值