gpt4 book ai didi

objective-c - 等待任务时忽略用户输入 - Objective-C

转载 作者:行者123 更新时间:2023-12-03 16:51:57 25 4
gpt4 key购买 nike

我有一个带有“转换”按钮的应用程序。当我单击此按钮时,应用程序使用 NSTask 启动一个新进程,然后使该按钮变灰,直到该进程完成。

我的问题是,应用程序会保存用户在等待过程完成时所做的任何点击。因此,即使按钮呈灰色,用户也可以单击它,并且该过程一旦完成就会立即重新开始。

我正在等待该过程完成,使用:

[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];
}

这将启动您的任务,禁用按钮,但不会阻止线程,因为您没有等待它完成。相反,您正在等待任务完成时的异步通知。由于该按钮在任务完成之前处于禁用状态,因此这将忽略发送给它的所有事件。

关于objective-c - 等待任务时忽略用户输入 - Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1817726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com