1

我有一个NSImageView需要重绘不断更新的图像。NSImage我有一个创建NSImageView.

使用多线程,我可以轻松地让模型对象在后台线程中不断更新其输出图像。但是由于 UI 交互应该在主线程上完成,我不能在后台线程上设置 NSImageView 的图像。如果我NSImageView在主线程上更新,程序将变得无响应

4

2 回答 2

1

我讨厌自相矛盾,但是为什么您认为在主线程上更新图像会使程序无响应?

如果计算下一个NSImage是瞬时的,那么从逻辑上讲,您应该只计算并显示最后一个,因为两者之间的任何一个都不会被感知。

如果计算下一个需要一些时间,则在主线程之外进行计算,然后将图像推送到主线程上的视图(例如,使用performSelectorOnMainThread:...)。主线程不会变得无响应,因为在您计算下一个图像以处理其他事件时,它有所有时间。

如果更新比显示器的帧速率更频繁,那么您可以通过设置自己CVDisplayLink并轮询正在更新图像的任何内容以在每次滴答时获得最新的图像来获得更好的效果。

于 2012-08-21T19:46:45.253 回答
0

不要NSimageView在后台线程上更新。它不是线程安全的。你应该使用performSelectorOnMainThread:withObject:waitUntilDone:

于 2012-08-22T06:57:57.890 回答