Vla*_*ala 1 cocoa objective-c nstask
我有一个带有"转换"按钮的应用程序.当我单击此按钮时,应用程序使用NSTask启动一个新进程,然后灰色按钮,直到该进程完成.
我的问题是,该应用程序会保存用户在等待该过程完成时所做的任何点击.因此,即使按钮显示为灰色,用户也可以单击该按钮,一旦完成,该过程将立即重新开始.
我正在等待该过程完成使用:
[task waitUntilExit];
Run Code Online (Sandbox Code Playgroud)
在等待此任务完成时如何忽略任何用户输入?
-[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];
}
Run Code Online (Sandbox Code Playgroud)
这将启动您的任务,禁用该按钮,但不会阻止该线程,因为您不是在等待它完成.相反,您正在等待任务完成时的异步通知.由于该按钮在任务完成之前被禁用,因此将忽略发送给它的所有事件.