如何在打开模态对话框时接收通知

时间:2010-08-11 12:55:18

标签: cocoa macos nsnotifications

我需要向GUI线程发送消息,GUI线程在下次空闲时应该处理。此消息可以来自GUI线程或后台线程。

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

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

如果有模态对话框,则不会调度此项,我必须在处理之前关闭对话框,因此这对我来说无法使用。

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

1 个答案:

答案 0 :(得分:0)

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

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

您也可以使用NSNotificationCenter并指定运行循环模式,请参阅the discussion here。但是从线程环境中使用NSNotificationCenter来开始使用here是很棘手的,所以我不推荐它。

在10.6上,您还可以使用dispatch_async