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

时间:2009-01-08 10:23:09

标签: cocoa

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

以下是代码:

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 个答案:

答案 0 :(得分:5)

您需要调用的方法是setNeedsDisplay:,而不是displayIfNeeded。后者的意思是“如果有人发送给你display,请发送给自己setNeedsDisplay:YES”。如果你没有做最后一部分,那么视图就不知道它应该显示,displayIfNeeded将什么都不做。

一旦你添加setNeedsDisplay:消息,你就可以删除displayIfNeeded消息,因为框架会定期将该消息发送到窗口(因此,它的所有视图)反正。

答案 1 :(得分:0)

您的代码看起来与我在Mac和iPhone上用于更新UIProgressIndicators和NSProgressIndicators的代码完全相同,代码对我来说非常适合。我假设,像menumachine一样,你的while循环存在于后台线程上(使用performSelectorInBackground创建:withObject:或NSThread的detachNewThreadSelector:toTarget:withObject:)。

进度指示器的minValue和maxValue是否设置正确(0和100或您的比例是多少)?

更新发生的频率如何?也许你发送太多事件太快,UI没有机会正确更新。

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