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

在将固件下载到设备时更新进度指示器

  •  0
  • shrads  · 技术社区  · 17 年前

    我正在开发一个cocoa应用程序,它可以将固件下载到设备上。使用NSProgressIndicator显示下载进度。我打电话给 -incrementBy: while循环中DeviceRequestTO方法之后的NSProgressIndicator方法。但是进度指示器只有在整个固件写入设备后才会更新。它显示了100%的一次性完成。所以我加了 -displayIfNeeded NSView类的方法。现在它显示进展顺利,但这也发生在固件下载完成后。如何同时实现进度指示和写入操作?

    代码如下:

    while(1)
    {
        int result = (*dev)->DeviceRequestTO(dev, &request);
        printf("\nBlocks Written Successfully: %d",DfuBlockCnt);
        [refToSelf performSelectorOnMainThread:@selector(notifyContent)
                            withObject:nil
                            waitUntilDone:NO];
    }
    
    //In main thread
    - (void)notifyContent{
        [dnldIndicator incrementBy:1];
        [self displayIfNeeded];
    }
    
    2 回复  |  直到 17 年前
        1
  •  5
  •   Peter Hosey    17 年前

    setNeedsDisplay: ,不是 displayIfNeeded . 后者意味着派你自己去 display 如果有人派你来 setNeedsDisplay:YES . 如果不执行最后一部分,视图将不知道它应该显示,并且 显示是否需要 什么也做不了。

    一旦你加上 设置需求显示: 消息,你可以把 显示是否需要 消息,因为框架会定期将该消息发送到窗口(因此,发送到它的所有视图)。

        2
  •  0
  •   Brad Larson    17 年前

    你的代码看起来和我用来更新Mac和iPhone上的uiProgressIndicator和NprogressIndicator的代码完全一样,这些代码非常适合我。我假设,像menumachine一样,while循环存在于后台线程(使用performSelectorInB创建背景:withObject:或NSThread的detachNewThreaD选择器:目标:与对象:)。

    进度指示器的最小值和最大值是否设置正确(0和100或任何刻度)?

    据我所知,这段代码应该行得通。