Tôi có một vòng lặp while
, chạy trong nhiều giây và đó là lý do tại sao tôi muốn cập nhật thanh tiến trình (NSProgressIndicator) trong quá trình đó, nhưng nó chỉ cập nhật một lần sau khi vòng lặp kết thúc. Điều tương tự cũng xảy ra nếu tôi muốn cập nhật văn bản nhãn, nhân tiện.Làm cách nào để cập nhật thanh tiến trình trong Cocoa trong vòng lặp chạy dài?
Tôi tin rằng, vòng lặp của tôi ngăn các ứng dụng khác xảy ra. Phải có một kỹ thuật khác. Điều này có liên quan đến chủ đề hay gì đó không? Có phải tôi đang trên đường ray bên phải không? Ai đó có thể xin vui lòng cho tôi một ví dụ đơn giản, làm thế nào để "tối ưu" ứng dụng của tôi?
ứng dụng của tôi là một ứng dụng Cocoa (Xcode 3.2.1) với hai phương pháp này trong Example_AppDelegate.m
tôi:
// This method runs when a start button is clicked. - (IBAction)startIt:(id)sender { [progressbar setDoubleValue:0.0]; [progressbar startAnimation:sender]; running = YES; // this is a instance variable int i = 0; while (running) { if (i++ >= processAmount) { // processAmount is something like 1000000 running = NO; continue; } // Update progress bar double progr = (double)i/(double)processAmount; NSLog(@"progr: %f", progr); // Logs values between 0.0 and 1.0 [progressbar setDoubleValue:progr]; [progressbar needsDisplay]; // Do I need this? // Do some more hard work here... } } // This method runs when a stop button is clicked, but as long // as -startIt is busy, a click on the stop button does nothing. - (IBAction)stopIt:(id)sender { NSLog(@"Stop it!"); running = NO; [progressbar stopAnimation:sender]; }
Tôi thực sự mới để Objective-C, Cocoa và các ứng dụng với một giao diện người dùng. Cảm ơn bạn rất nhiều vì bất kỳ câu trả lời hữu ích nào.
Cảm ơn rất nhiều, tôi sẽ cung cấp thử một ngày cuối tuần này! – Nick
Đó là những gì tôi đang tìm kiếm.Hoạt động tốt và điều này mang lại cho tôi một điểm khởi đầu tốt để tìm hiểu thêm về nó. Cảm ơn! – Nick
Cảm ơn Enchilada này! Tôi vừa học được điều mà tôi không biết! Rất vui mừng khi tìm hiểu về các khối và GCD !! –