cocoa - 当模式对话框打开时如何接收通知

标签 cocoa macos nsnotifications

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

我尝试了 MachPort/通知的组合。但是当我做

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

如果存在模式对话框,则不会调度该对话框,我必须在处理该对话框之前关闭该对话框,因此这对我来说不可用。

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

最佳答案

简短回答:不要使用模式对话框。

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

您还可以使用NSNotificationCenter并指定运行循环模式,请参阅the discussion here 。但使用 NSNotificationCenter 却很棘手从线程环境开始,如所述 here ,所以我不推荐。

在 10.6 上,您还可以使用 dispatch_async .

关于cocoa - 当模式对话框打开时如何接收通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3458448/

相关文章:

objective-c - 10.8中如何显示文件复制进度

Eclipse 打开空白工作区

macos - 如何在 iOS 8 和 Yosemite 之间设置镜像 session ?

objective-c - 合并 NSNotifications

objective-c - NSNotifications 与同一协议(protocol)的多个实例的委托(delegate)

iphone - 如何让ui始终响应并进行后台更新?

objective-c - Cocoa 容器的 deepCopy - 如何防止无限递归?

iphone - 那里有适用于 iOS 的 unrar 库吗?

objective-c - 为什么全新的 Mac 不显示我的屏幕保护程序?

ios检测无线变化