在firefox上弹出模式对话框后显示NPAPI插件挂起ui
下面是我试图做的:我的合作伙伴的NPAPI插件调用我的vc dll中的函数,我的函数显示一个模式对话框并接受用户输入。但在对话框显示后,firefox的插件挂起ui将在几秒钟后弹出,我必须手动关闭它,否则NPAPI插件将在几秒钟后崩溃在firefox上弹出模式对话框后显示NPAPI插件挂起ui,firefox,plugins,mfc,modal-dialog,npapi,Firefox,Plugins,Mfc,Modal Dialog,Npapi,下面是我试图做的:我的合作伙伴的NPAPI插件调用我的vc dll中的函数,我的函数显示一个模式对话框并接受用户输入。但在对话框显示后,firefox的插件挂起ui将在几秒钟后弹出,我必须手动关闭它,否则NPAPI插件将在几秒钟后崩溃 HANDLE hThread - AfxBeginThread(DialogProc);//dialog diaplays in this thread MsgWaitForMultipleObjects(1,&hThread,FALSE,INFINITE
HANDLE hThread - AfxBeginThread(DialogProc);//dialog diaplays in this thread
MsgWaitForMultipleObjects(1,&hThread,FALSE,INFINITE,QS_ALLINPUT);
此外,如果我将firefox设置为对话框的父窗口(我使用getForgroundWindow()
获取firefox的句柄),我的对话框将导致UI挂起
我已经尝试过谷歌,我确实发现了一些类似的问题(),但这些问题的答案并没有解决我的问题
我们将非常感谢您的帮助。您的问题是您正在阻塞主线程。您可能正在另一个线程上打开该对话框,但当您打开
MsgWaitForMultipleObjects
时,该对话框会一直阻塞,直到其他线程完成。您的函数必须返回,不能等待对话框。经过几天的搜索和测试,我终于找到了两种解决此问题的方法
DialogBox
或DialogBoxParam
而不是MFC DoModal弹出模式对话框两个1)2)在主线程中弹出对话框。我真的不明白为什么?它应该与windows消息处理机制有关。任何人有任何想法,我们都可以讨论。:-) 我必须等到线程完成,或者说我想要的只是模态对话框,我需要用户输入,然后继续运行。我找到了一些方法来完成这项工作,如果你想看一下我的答案。:-。。。说真的,你等不及对话了。根据定义,如果您正在等待对话框,那么您就是在阻塞主线程。阻止主线程意味着“在主线程上的任何时间段内等待任何事情发生”。如果你的电脑上有VS/VC6 IDE,你可以进行一个简单的测试。我不明白你的意思,但我想说你要么(a)不明白“阻止主线程”是什么意思,要么(b)这会触发一些奇怪的行为,其中主线程上有不同的执行线程,这可能非常危险。您正在等待(不是从NPAPI的函数调用返回)或者您没有等待(不是阻塞);如果你没有等待/阻止,你会没事的。如果你正在等待/阻止,那么你会有问题。这不是一件复杂的事情。如果你需要等待一个对话框,在另一个线程中等待。如果我在另一个线程中等待一个对话框,那么我必须在主线程中等待这个线程,这会导致同样的情况。重点是在用户关闭对话框之前,我无法从函数返回。我不知道为什么,
DialogBox
会使firefox插件中的“等待/阻止”行为安静正常。你没有在听。NPAPI规范说你不能这样做。完全禁止在主线程上等待。如果你这样做,你将得到你正在使用的对话框抱怨。句号。如果你找到了一种似乎可以避免它的方法,那么我保证某些危险的事情正在发生。这不是观点,这不是你可以说的“但我的用例需要它”。找到另一种方法。