代码之家  ›  专栏  ›  技术社区  ›  zneak

同步调用NSView的好方法是什么?

  •  0
  • zneak  · 技术社区  · 15 年前

    <Error>: kCGErrorIllegalArgument: CGSUnionRegionWithRect : Invalid region 控制台中的消息。

    我不知道什么是正确的方法来同步呼叫 [view setNeedsDisplay:YES]

    为了澄清一点,线程B(实际上是一个调度队列)通过调用以下命令为视图提供了新的内容:

    -(void)setImageBuffer:(unsigned char*)buffer
    {
        /* image handling stuff; thread-safe */
    
        [self setNeedsDisplay:YES]; // but this is not thread-safe
    }
    

    然后运行run循环的线程A应该重新显示视图。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Marcelo Cantos    15 年前
    -(void)setImageBuffer:(unsigned char*)buffer
    {
        /* image handling stuff; thread-safe */
    
        [self performSelectorOnMainThread:@selector(induceRedraw)
                               withObject:nil
                                          // Don't just copy this; pick one...
                            waitUntilDone:YES or NO];
    }
    
    -(void)induceRedraw
    {
        [self setNeedsDisplay:YES]; // but this is not thread-safe
    }
    
        2
  •  0
  •   user156027 user156027    14 年前

    dispatch_queue_t q = dispatch_get_main_queue();
    dispatch_async(q, ^(void) {
      [self setNeedsDisplay: YES];
    });