我有一個「convert」按鈕的應用程序。當我點擊這個按鈕時,應用程序使用NSTask開始一個新的過程,然後灰色按鈕直到過程結束。在等待任務時忽略用戶輸入 - Objective-C
我的問題是,應用程序會保存用戶在等待過程完成時所做的任何點擊。所以即使該按鈕變灰,用戶也可以點擊它,並且該過程一旦完成就立即重新開始。
我在等待的過程中使用完成:
[task waitUntilExit];
如何忽略任何用戶輸入在等待這個任務完成?
我有一個「convert」按鈕的應用程序。當我點擊這個按鈕時,應用程序使用NSTask開始一個新的過程,然後灰色按鈕直到過程結束。在等待任務時忽略用戶輸入 - Objective-C
我的問題是,應用程序會保存用戶在等待過程完成時所做的任何點擊。所以即使該按鈕變灰,用戶也可以點擊它,並且該過程一旦完成就立即重新開始。
我在等待的過程中使用完成:
[task waitUntilExit];
如何忽略任何用戶輸入在等待這個任務完成?
-[NSTask waitUntilExit]
當然是阻塞呼叫。這意味着線程會暫停(就像運行循環一樣),並且發送到線程的所有事件都會排隊,直到運行循環可以處理它們。
相反的waitUntilExit
,我會做這樣的事情:
- (IBAction) myButtonMethod {
NSTask * task = ....;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskFinished:) name:NSTaskDidTerminateNotification object:task];
[myButton setEnabled:NO];
[task launch];
}
- (void) taskFinished:(NSNotification *)note {
[myButton setEnabled:YES];
}
這將啓動你的任務,禁用按鈕,而不是阻塞線程,因爲你不等待它完成。相反,只要任務完成,您就等待異步通知。由於該按鈕被禁用,直到任務完成,這將忽略發送給它的所有事件。
更容易:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];