gpt4 book ai didi

c# - 具有返回类型的非异步方法中的模态 UIAlertController

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:09 25 4
gpt4 key购买 nike

我目前有一个必须实现的方法,它需要准确的签名。我无法添加 async , 因为它返回 bool而且我不能使返回类型为 Task<bool> .该方法显示模态 UIAlertController 并等待结果。它需要在 UIAlertController 关闭后返回结果。目前,该方法自 PresentViewController 起无效。是一个阻塞调用。因此 UIAlertController 永远不会显示,应用程序会卡在那里。

方法如下:

public static bool ShowYesNoMessage(string title, string message)
{
TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();

UIAlertController alertController = UIAlertController.Create(title, message, UIAlertControllerStyle.Alert);

alertController.AddAction(UIAlertAction.Create("Yes", UIAlertActionStyle.Default, (action) => tcs.TrySetResult(true)));
alertController.AddAction(UIAlertAction.Create("No", UIAlertActionStyle.Default, (action) => tcs.TrySetResult(false)));

//Gets the currently visible view controller and present from this one
UIHelper.CurrentViewController.PresentViewController(alertController, true, null);

tcs.Task.Wait();
return tcs.Task.Result;
}

有没有办法在像“ShowYesNoMessage”这样的阻塞调用中等待方法的结果时保持 UI 更新?也许是一个 iOS 相关的方法来防止 UI 卡住模态 UIAlertController?或者可能是另一种呈现模态视图的方法?

最佳答案

您可以使用 WaitHandle 等待用户响应。可能不是最好的解决方法,但应该可行。

public static bool ShowYesNoMessage(string title, string message)
{
var resetEvent = new AutoResetEvent(false);
var result = false;

// Run in another thread so it doesn't block
Task.Run(action: () =>
{
var alertController = UIAlertController.Create(title, message, UIAlertControllerStyle.Alert);

alertController.AddAction(
UIAlertAction.Create(
"Yes",
UIAlertActionStyle.Default,
(action) =>
{
result = true;
resetEvent.Set();
}));

alertController.AddAction(
UIAlertAction.Create(
"No",
UIAlertActionStyle.Default,
(action) =>
{
result = false;
resetEvent.Set();
}));

InvokeOnMainThread(() => UIHelper.CurrentViewController.PresentViewController(alertController, true, null));
});

resetEvent.WaitOne();

return result;
}

注意:代码未经测试

编辑:代码可能仍会阻塞,但让我知道进展如何。我不在 Mac 附近,所以无法对其进行测试。

关于c# - 具有返回类型的非异步方法中的模态 UIAlertController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32079625/

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