代码之家  ›  专栏  ›  技术社区  ›  Lothar

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

  •  1
  • Lothar  · 技术社区  · 14 年前

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

    我尝试了一个machport/通知的组合。但当我做

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

    如果存在模式对话框,则不会发送此消息。在处理该对话框之前,必须先关闭该对话框,这样我就无法使用它。

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

    1 回复  |  直到 14 年前
        1
  •  0
  •   Yuji    14 年前

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

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

    您也可以使用 NSNotificationCenter 并指定运行循环模式,请参见 the discussion here . 但是很难使用 通知中间 从线程环境开始,如前所述 here ,所以我不推荐。

    在10.6,您还可以使用 dispatch_async .