我有一个“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];