MFC上的COM“服务器忙”对话框

时间:2012-03-06 02:19:44

标签: com

我有MFC应用程序弹出服务器繁忙的dilaog,看起来就像这里: https://stackoverflow.com/questions/4968872/how-can-i-disable-the-ole-server-busy-dialog-in-a-c-sharp-app

此应用程序调用AfxOleInit()。 http://support.microsoft.com/kb/248019解释说我应该这样做 AfxOleGetMessageFilter() - > SetMessagePendingDelay(nTimeout); 避免得到对话框。它还建议我使用OleInitialize而不是AfxOleInit来抑制对话框。

这是否意味着如果我不调用AfxOleInit(),那么我将无法获得服务器忙碌对话框? 我无法真正测试,因为没有AfxOleInit(),AfxOleGetMessageFilter会返回空指针,因此我无法将其设置为1ms并测试它是否在超时时弹出对话框。

所以我的问题是,如果我不打电话给AfxOleInit那么我会得到“服务器忙”对话框吗?

由于

1 个答案:

答案 0 :(得分:1)

看,对AfxOleInit的调用与内部调用“OleInitialize”的“CoInitialize”完全相同。

它初始化COM环境,因此您可以使用OLE自动化,丰富的OLE容器,ActiveX控件和e.t.c.但是额外性它会安装一个消息过滤器,然后您可以使用AfxOleGetMessageFilter()获取该过滤器。当OLE请求阻止UI太长时,此消息过滤器专门用于处理情况。

因此,如果您调用OleInitialize而不是'AfxOleInit',则不会安装消息过滤器,因此您将看不到“服务器正忙”对话框,并且AfxOleGetMessageFilter()将指向NULL。

同样如文章中所述,您可以使用

AfxOleInit()
....
AfxOleGetMessageFilter()->EnableNotRespondingDialog(FALSE);

禁用此对话框。

但你最好的选择是找到潜在的问题。