【问题标题】:How do I update a progress bar in Cocoa during a long running loop?如何在长时间运行的循环中更新 Cocoa 中的进度条?
【发布时间】:2011-01-31 08:43:49
【问题描述】:
我有一个while 循环,它运行了很多秒,这就是为什么我想在这个过程中更新一个进度条(NSProgressIndicator),但它只在循环完成后更新一次。顺便说一句,如果我想更新标签文本,也会发生同样的情况。
我相信,我的循环会阻止该应用程序的其他事情发生。必须有另一种技术。这与线程或其他东西有关吗?我在正确的轨道上吗?谁能给我一个简单的例子,如何“优化”我的应用程序?
我的应用程序是一个 Cocoa 应用程序 (Xcode 3.2.1),在我的 Example_AppDelegate.m 中有这两种方法:
// 此方法在单击开始按钮时运行。
- (IBAction)startIt:(id)sender {
[进度条设置双值:0.0];
[进度条开始动画:发件人];
运行=是; // 这是一个实例变量
诠释 i = 0;
在跑步的时候) {
if (i++ >= processAmount) { // processAmount 类似于 1000000
运行 = 否;
继续;
}
// 更新进度条
双程序=(双)我/(双)processAmount;
NSLog(@"progr: %f", progr); // 记录 0.0 到 1.0 之间的值
[进度条 setDoubleValue:progr];
[进度条需要显示]; // 我需要这个吗?
// 在这里做一些更努力的工作...
}
}
// 这个方法在点击停止按钮时运行,但只要
// 因为 -startIt 很忙,所以单击停止按钮什么也不做。
- (IBAction)stopIt:(id)sender {
NSLog(@"停止!");
运行 = 否;
[进度条停止动画:发件人];
}
我对 Objective-C、Cocoa 和带有 UI 的应用程序非常陌生。非常感谢您提供任何有用的答案。
【问题讨论】:
标签:
objective-c
cocoa
macos