cocoa - 持续更新 Mac 应用程序 UI?

标签 cocoa macos

我希望我的 Mac cocoa 应用程序能够持续更新 View ,即使它进入后台?诸如事件监视器或数字色彩计之类的东西。

我怎样才能实现这样的行为?

谢谢!

编辑:我从 NSGraphicContext 获取上下文,然后创建一个线程来在后台完成这项工作。

- (void)drawRect:(NSRect)dirtyRect
{   
    context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
    [NSThread detachNewThreadSelector: @selector(ExecuteDrawingInBackGround:) toTarget: self withObject: nil];
}

最佳答案

您无法从后台线程使用 Mac UI API,因为它不是线程安全的。

连续重新绘制自身的程序通过让后台线程(如果有)通知主线程某些内容已更改并且需要重新绘制来实现此目的。最简单的方法是让后台线程发送 -performSelector:OnMainThreadWithObject:waitUntilDone:某个对象,通常是文档或 View Controller 。

或者,您也可以使用 NSTimer定期触发并完全避免后台线程。

关于cocoa - 持续更新 Mac 应用程序 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6608720/

相关文章:

macos - 检查工作表是否打开

swift - NSStatusItem 和 NSMenuItem 检测换档按下

macos - 如何以编程方式在 macOS 上验证用户和密码?

macos - 从 OSX 命令行访问(forge-environment)时出现问题

macos - 在 apache flink 中运行生成的 jar 文件

objective-c - 查看 interpretKeyEvents : but pass unwanted ones up the responder chain?

objective-c - 链接到 PostgreSQL 和 SSL

objective-c - 任务终止后接收数据?

c++ - 在 Mac 上使用 Instruments 检查内存泄漏

objective-c - 等待条件继续