gpt4 book ai didi

multithreading - Cocoa-UI : Delayed performSelector . ...延迟

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

上下文:

在我的 Mac 应用程序上,当我单击列表项时,会向一个对象发送一条通知,该对象在后台执行某些操作,而 UI 上有一条等待消息。所有这些都发生在一个窗口中,您可以通过“关闭”按钮退出该窗口。发送通知时,该按钮默认处于禁用状态。

我想要做的是一个超时功能,允许用户在几分钟后退出此窗口,从而启用关闭按钮。

代码:

- (IBAction)onChangeOperator:(id)sender
{
[self performSelector:@selector(timerFired:) withObject:nil afterDelay:2.0];
....
....
//takes time
....
}

-(void) timerFired:(NSTimer *) theTimer {
[close_button setEnabled:YES];
}

问题:在 onChangeOperator 完成之前,该按钮不会启用,而我希望在选择器被触发后立即启用它。

我认为这是一个线程问题,但我无法弄清楚。

最佳答案

从文档中,performSelector:withObject:afterDelay:

Invokes a method of the receiver on the current thread using the default mode after a delay.

所以当前线程仍然处于阻塞状态。您应该在新线程上的 onChangeOperator 中运行昂贵的操作:

- (IBAction)onChangeOperator:(id)sender 
{
[self performSelector:@selector(timerFired:) withObject:nil afterDelay:2.0];
[self performSelectorInBackground:@selector(doUpdates) withObject:nil];
}

-(void) timerFired:(NSTimer *) theTimer
{
[close_button setEnabled:YES];
}

-(void)doUpdates
{
.... stuff that takes time....
}

关于multithreading - Cocoa-UI : Delayed performSelector . ...延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062196/

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