我想保持活动主线程不冻结我的应用程序。但我不知道如何通过我的异步任务来制造非竞赛条件。所以我需要等待我的异步任务,但不要阻止mainQueue。
public override bool ShouldPerformSegue(string segueIdentifier, NSObject sender)
{
bool isAlowed = false;
ActivityIndicator.StartAnimating();
DispatchQueue.GetGlobalQueue(DispatchQueuePriority.High).DispatchAsync(()=>
{
NSThread.SleepFor(2);
isAlowed = true;
});
return isAlowed;
}
答案 0 :(得分:1)
不是启动segue然后尝试确定是否应该异步执行segue,而是简单地处理用户交互而不触发segue,确定是否应该执行segue并且然后启动SEGUE。
我不能给你准确的代码,因为我不太了解Xamarin,但伪代码是这样的:
handleHandleButtonTap() {
initiateBackgroundCheckWithHandler( isAllowed(bool) {
if isAllowed {
performSegueWithIdentifer("SomeSegue") // You need to dispatch this on the main queue
}
})
}
Xamarin / C#示例:
void SomeButton_TouchUpInside(object sender, EventArgs e)
{
bool isAllowed = false;
InvokeInBackground(() =>
{
// Do some task... and optionally assign isAllowed to true...
if (isAllowed)
DispatchQueue.MainQueue.DispatchAsync(() => PerformSegue("SomeSegue", this));
});
}