Я выполняю веб-запрос в фоновом режиме и хочу, чтобы пользователь мог отменить этот запрос. Я использую UIActionSheet с кнопкой «Отмена» во время выполнения веб-запроса. Когда веб-запрос возвращает ошибку, я закрываю UIActionSheet, вызывая DismissWithClickedButtonIndex (0, true). Затем я показываю UIAlertView с сообщением об ошибке и возможностью отменить или повторить веб-запрос.
В большинстве случаев все работает нормально, но иногда я получаю сообщение «wait_fences: не удалось получить ответ: 10004003» в окне вывода консоли, и, кстати, наблюдается какое-то странное поведение пользовательского интерфейса.
Я немного поискал и обнаружил, что это вызвано чем-то вроде того, что нижележащее представление не может получить управление до того, как управление будет передано в UIAlertView. Некоторые предлагали отложить отображение AlertView с помощью PerformSelector. Это правильное решение? Если да, то как передать метод Show UIAlertView первому параметру метода PerformSelector?
В настоящее время я использую это решение для задержки:
private void StartAfterParentViewUpdate(NSAction action)
{
NSAction delayedAction = () => BeginInvokeOnMainThread(action);
NSTimer.CreateScheduledTimer(new TimeSpan(0, 0, 0, 0, 200), delayedAction);
}
Таким образом, я могу вызвать StartAfterParentViewUpdate (_alertView.Show), и я предполагаю, что он запустится в основном потоке пользовательского интерфейса, как только поток сможет его обработать. Это правильно или есть способ лучше решить эту проблему?