C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案)

首先官方有对这个错误给出解释和解决方案,连接如下:

https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B

简单来说,貌似是线程问题,我猜。。。

之前我尝试着在代码中添加

Thread.Sleep(1000);

来进行解决,这种办法虽然很蠢,但是有点效果,但是十分不稳定,对于需要休眠的时间很难把握,而且影响程序执行效率。

后来我发现,程序虽然出现呼叫被拒绝的异常,但是加假如对出错的代码,加上try catch,对异常进行捕捉,程序是能够顺利执行的(前提是操作Excel的代码如果比较多的话,不能一起try catch,要分开来try catch,因为如果说在前面捕捉到异常,后面的代码是不执行的),对每一步代码加上try catch,像这样:

try
{ 
    //code1
}
catch (Exception)
{}
try
{ 
    //code2
}
catch (Exception)
{}
try
{ 
    //code3
}
catch (Exception)
{}
try
{ 
    //code4
}
catch (Exception)
{}

嗯。。没错,这种方法是完全没有问题的,程序完全可以执行,并且得到正确结果(捕捉到的异常不用处理,忽略即可)。

但是这个方法同样十分愚蠢。。。

简单看了一下官方给出的解决方案,看不懂,但是看不懂没关系。。会用就行了(官方的解决方案链接在文章开头)

简单来说,就是自己新写一个MessageFilter类,把异常消息单独过滤出来进行处理,然后像这样就行了:

// Register the IOleMessageFilter to handle any threading
MessageFilter.Register();



// ==Insert your code here.==



// and turn off the IOleMessageFilter.
MessageFilter.Revoke();

官方给出的Main方法里的代码很多,但是简单的框架就如同上面所示。这样是最正确的解决方案,并且执行效率高,也不需要try catch去捕获异常。

 

(PS:我看到有人说,是因为我们用的MS Excel或者是MS Word没有激活才报错的?成功激活了之后也不会报这个错误?这个还不清楚,有待测试)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值