问题描述:

最近帮朋友弄个程序,处理Office Excel表.该Excel表加了密码,并且含有很多数据,当在VC中通过 Excel Ole对象打开该Excel文档时候,出现 "服务器正在运行中“对话框,其中有”切换到。。。“按钮。

根本原因:

发现问题我知道这是Ole Server Busy对话框,但是我不知为什么会弹出该对话框,是系统默认的还是可以进行定制。经过搜索发现微软对该问题进行了解释。

地址如下:

http://support.microsoft.com/kb/248019/en-us

大意是说:如果你使用了MFC 应用程序并且初始化COM环境使用的是AfxOleInit,当执行一个需要很长时间返回的COM调用时就会遇到这个问题。

一般使用MFC客户应用程序,包含消息循环,推荐使用AfxOleInit来初始化COM. 而AfxOleInit默认会设置Ole消息过滤器.请看AfxOleInit的源码:

BOOL AFXAPI AfxOleInit()
{
...
// allocate and initialize default message filter
if (pThread->m_pMessageFilter == NULL)
{
pThread->m_pMessageFilter = new COleMessageFilter;
ASSERT(AfxOleGetMessageFilter() != NULL);
AfxOleGetMessageFilter()->Register();
}
return TRUE;
InitFailed:
AfxOleTerm();
return FALSE;
}

COleMessageFilter就是用来使被调用的Ole Server 应用处于一个Busy的状态,以便于其他调用这个Ole Server 应用能够进行相应的处理或者Retry.

通过查看COleMessageFilter()构造函数,会发现默认是会显示Ole Server Busy对话框和Not Responding 对话框的。所以当一个COM调用需要花很长时间才返回,出现这个对话框是正常的。

COleMessageFilter::COleMessageFilter()
{
// begin in not-busy state
m_nBusyCount = 0;
// dialogs are enabled by default
m_bEnableBusy = TRUE;
m_bEnableNotResponding = TRUE;
m_nBusyReply = SERVERCALL_RETRYLATER;
// effective only when m_nBusyCount != 0
m_nRetryReply = 10000;  // default is 10 sec
m_nTimeout = 8000;  // default is 8 sec
m_bUnblocking = FALSE;
// TRUE to avoid re-entrancy when busy dialog is up
m_bRegistered = FALSE;
ASSERT_VALID(this);
}

解决方案:

微软官方给出的解决方案是:

1, 使用 AfxOleGetMessageFilter()->SetMessagePendingDelay(nTimeout); 来延长超时时间,也就是延长出现对话框的时间,但如果到这个时间还没有返回,这个对话框还是会出来。

2,使用

AfxOleGetMessageFilter()->EnableNotRespondingDialog(FALSE);

AfxOleGetMessageFilter()->EnableBusyDialog(FALSE);

来阻止弹出Server Busy 对话框和Not Responding 对话框。

即使用了第2种方案,对话框是不弹了,但是客户应用还是处于一个freeze的状态,所以为了客户应用友好,最好创建一个线程函数,在线程函数中显示一个进度条对话框,等待一个Event,并且定时处理消息循环,当COM调用返回后,设置Event为有信号状态,关闭进度条。

VC 操作Word, Excel 出现服务器正在运行中 Ole Server Busy对话框的原因分析和解决建议相关推荐

  1. 百度服务器最近不稳定,百度收录量持续减少的原因分析与解决办法

    半个月前主机吧网站遭遇到了大多数站长都会到的问题:网站收录量持续减少. 刚开始的时候主机吧没有在意,因为偶尔一两天的收录减少是很正常的.直到收录量持续减少后,主机吧才开始发觉这并不是正常的现象. 主机 ...

  2. Excel按键盘无法跳转和滚动单元格的原因分析和解决方法

    在Excel中,当我们选中一个单元格或者区域后,再按键盘的方向键或者组合快捷键(如Ctrl+方向键.Shift+方向键等),则光标会跟随着方向键移动到其他的单元格或区域. 但是有的小伙伴在使用Exce ...

  3. 消息框:服务器正在运行中 OLE解决办法

    你使用了AfxOleInit()初始化MFC客户端时,会自动在CWinApp中设置一个COleMessageFilter数据成员.该类提供了IMessageFilter的实现,允许用户在等待异步操作的 ...

  4. win8.1 服务器正在运行,Win8.1系统打开IE浏览器提示服务器正在运行中的解决方法图文教程...

    win8.1系统自带有ie浏览器,在使用过程中难免会遇到一些故障问题,这不有些用户说win8.1系统打开ie浏览器提示"服务器正在运行中",导致浏览器无法正常运行,该如何解决呢?大 ...

  5. VC++ 操作 word

    摘要: 使用VC编程来操纵Office.你可以实现诸如:Word文件打印.传送数据到Word文档.发送E-MAIL.自动产生表格.Excel数据统计.圆饼图,直方图显示.自动报表生成.播放幻灯.doc ...

  6. VC++ 操作Word

    摘要: 使用VC编程来操纵Office.你可以实现诸如:Word文件打印.传送数据到Word文档.发送E-MAIL.自动产生表格.Excel数据统计.圆饼图,直方图显示.自动报表生成.播放幻灯.doc ...

  7. jacob操作word excel 将word excel转换成网页形式

    jacob操作word excel(来自http://sinye.iteye.com/blog/588050) 项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理 ...

  8. VC操作word绘制表格

    VC操作word绘制表格时,需要选择绘制好的整个表格框居中显示, 1,如何选中整个表格框,表格的对象table,然后居中 2.表格的个性化设置,表格项内再次设计一个m*n的表格框            ...

  9. C#Aspose操作Word Excel简版(后会研究补充更多功能)

    利用Aspose操作Word & Excel首先要在项目中标引用Aspose.Words.dll和Aspose.Cells.dll. 首先说一说向Word中写入数据,目前做的是向Word中的标 ...

最新文章

  1. codeception (4)Yii2下创建Acceptance Tests(验收测试)
  2. 机械臂底层通信协议说明
  3. matlab模拟钢琴演奏
  4. html鼠标响应事件吗,学习JavaScript鼠标响应事件
  5. fortran语言能用matlab,Fortran语言转matlab语言
  6. WinAPI: 钩子回调函数之 CallWndProcRetProc
  7. 天正电气lisp是什么文件_模仿天正电气低压系统图 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  8. VS C#生成dll,C#和unity工程调用
  9. Atitit.创建快捷方式 windows快捷方式的原理
  10. 如何在 Codeforces 上出题?
  11. VsCode必备插件
  12. deb包一般放在linux的哪个目录下,deb包安装目录详解
  13. navicat 导入dmp文件
  14. 再见2018,你好2019!
  15. 常用Java数据库连接池性能测试
  16. 汉语中的 熟语中的成语900个
  17. Crack:::Stimulsoft Ultimate 2023.1.2
  18. 计算机窗口中如何移动文件,简单介绍一下电脑中的文件或文件夹的复制、移动及删除的操作方式...
  19. 接手1号店的京东 更看重与沃尔玛的合作
  20. 菜鸟站长的坎坷建站经历

热门文章

  1. 解释一下后面的指令是什么意思:wget https://git.io/vpn -O openvpn-install.sh bash openvpn-install.sh...
  2. newifi mini纯净版OpenWrt兼容内核固件,集成rt2860v2、mt76x2e驱动
  3. 电脑html接口显示器不亮,台式电脑显示器不亮该怎么办 台式电脑显示器不亮的解决方法【图文】...
  4. 总结笔记 || 软件测试的基础理论(测试模型+测试用例+软件缺陷+测试总结......
  5. Photoshop肖像数字绘画中的照明和色彩艺术
  6. 超大声:“Python是世界上最好的语言,不服来辩!”(狗头保命)
  7. 计算机多媒体教程,计算机多媒体技术教程.ppt
  8. 谁看了日本LINE的聊天记录
  9. 写出10个常用的html标记,《HTML常用标签》
  10. 2021.10.13股票小计