NSStatusItem 阻止 NSWindows 中的用户界面更新



我正在处理一个应用程序,此应用程序中有几个NSWindows和一个StatusItem,以便在NSWindows未打开时访问它们。其中一些窗口会不断更新其界面,使用新的号码和状态。问题是每当我单击系统状态栏中的 StatusItem 时,它都会阻止窗口上的更新,并且在关闭 StatusMenu 之前看不到任何更新。

这是关于运行循环模式的。

在主

线程上运行的延迟操作通常安排在主运行循环NSDefaultRunLoopMode,这意味着在菜单或模式对话框打开时不运行。您需要改用NSRunLoopCommonModes,这将允许它们在默认和事件跟踪(菜单、对话框)模式下运行。

例如:

  • 如果使用 NSTimer 而不是 scheduledTimerWithTimeInterval 来触发更新事件,请将 timerWithTimeInterval[[NSRunLoop currentRunLoop] addTimer:theTimer forMode:NSRunLoopCommonModes] 结合使用。

  • 如果使用 performSelectorOnMainThread:withObject:waitUntilDone: ,请改用 performSelectorOnMainThread:withObject:waitUntilDone:modes: ,为 modes: 参数传递[NSArray arrayWithObject:NSRunLoopCommonModes]

最新更新