我有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那么我会得到“服务器忙”对话框吗?
由于
答案 0 :(得分:1)
看,对AfxOleInit
的调用与内部调用“OleInitialize”的“CoInitialize”完全相同。
它初始化COM环境,因此您可以使用OLE自动化,丰富的OLE容器,ActiveX控件和e.t.c.但是额外性它会安装一个消息过滤器,然后您可以使用AfxOleGetMessageFilter()
获取该过滤器。当OLE请求阻止UI太长时,此消息过滤器专门用于处理情况。
因此,如果您调用OleInitialize
而不是'AfxOleInit',则不会安装消息过滤器,因此您将看不到“服务器正忙”对话框,并且AfxOleGetMessageFilter()将指向NULL。
同样如文章中所述,您可以使用
AfxOleInit()
....
AfxOleGetMessageFilter()->EnableNotRespondingDialog(FALSE);
禁用此对话框。
但你最好的选择是找到潜在的问题。