Continuos UI обновить приложение Mac? - PullRequest
0 голосов
/ 07 июля 2011

Я хочу, чтобы мое приложение Mac Cocoa постоянно обновляло представление, даже если оно переходит на второй план? Что-то вроде Activity Monitor или DigitalColor Meter.

Как мне добиться такого поведения?

Спасибо!

РЕДАКТИРОВАТЬ: я получаю контекст из NSGraphicContext, а затем создать поток для выполнения работы в фоновом режиме.

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

1 Ответ

3 голосов
/ 07 июля 2011

Вы не можете использовать Mac UI API из фонового потока, потому что он не является потокобезопасным.

Программы, которые перерисовывают себя непрерывно, делают это, заставляя фоновые потоки (если таковые имеются) уведомлять основной поток, что что-то изменилось и нуждается в перерисовке.Это проще всего сделать, отправив фоновый поток -performSelector: OnMainThreadWithObject: waitUntilDone: какому-либо объекту, обычно документу или контроллеру представления.

В качестве альтернативы вы также можете использовать NSTimer регулярно запускать и вообще избегать фоновых потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...