关闭窗口而不等待 NotificationCenter 发布完成 Cocoa Swift

问题描述

就在致电 self.window?.close() 之前,我向 NotificationCenter.default.post(name: Notification.Name("frameCaptured"),object: nil) 发布通知通知的选择器可能需要一些时间才能完成。所以即使选择器不完整,我也想关闭窗口。这是可能的还是我应该以另一种方式解决这个问题?

解决方法

由于 close() 必须在主线程上运行,您需要做的就是将一个块排队以在不久的将来发布通知:

    DispatchQueue.main.async {
        NotificationCenter.default.post(name: Notification.Name("MyNotification"),object: self);
    }
    self.window?.close()

通知代码将在未来的某个主循环中执行。直到当前主循环上的所有代码都完成后才能启动,但会在所有挂起的主循环事件都赶上后立即运行,这很可能是紧随其后。