2010-08-11 63 views
1

我需要将消息发送到GUI线程,下次GUI线程处于空闲状态时应该处理它。该消息可以来自GUI线程或后台线程。如何在模态对话框打开的情况下接收通知

我尝试了MachPort/Notification的组合。但是,当我做了

[[NSNotificationQueue defaultQueue] enqueueNotification: my_notify postingStyle: NSPostASAP]; 

,如果有一个模式对话框这不是布控,我不得不关闭在被处理前的对话,所以这是不可用的我。

在菜单选择或实时调整大小期间不处理消息是可以的,但模态对话有点过于延迟。

回答

0

简答:不要使用模态对话框。

长答案:模态对话框由一个称为NSModalPanelRunLoopMode的特殊运行循环模式处理,请参见here。 要安排通话,一种方法是使用该文件中解释的performSelectorOnMainThread:withObject:waitUntilDone:modes:;不要忘记在那里指定模态模式和默认模式。

您也可以使用NSNotificationCenter并指定运行循环模式,请参阅the discussion here。但是,从线程环境中使用NSNotificationCenter开始,如here所述,因此我不推荐它。可以使用dispatch_async

+0

'performSelectorOnMainThread:withObject:waitUntilDone:'似乎足以向主线程报告模态对话框,尽管文档没有明确说明。 – JWWalker 2010-08-12 02:30:00

+0

确实。当不使用'modes:'时,文档不清楚它运行的模式。无论如何,我讨厌模态对话框,所以对我来说无所谓:p – Yuji 2010-08-12 03:46:18

+0

谢谢,是的,我讨厌模态对话框,并摆脱了其中大部分(我移植一个Windows/Linux应用程序,所以有很多)。但是,例如NSAlert只能工作模式,我想要一些数据更新工作,即使这加剧了。但是我会问一个关于如何编写非模态NSAlert的新问题。 – Lothar 2010-08-12 09:14:53

相关问题