2014-10-23 3 views
0

Как я могу приостановить приложение для предотвращения запуска следующего клиента модуля метода, не выбраны диалоговые кнопки? Например я хочу показать диалоговое окно обновления местоположения для доступа к службе местонахождения и я хочу, чтобы приостановить мое приложение для диалога ответаMonotouch: отменить ответ диалогового окна блока приложений

public CLLocation UpdateUserLocation() 
{ 
    CLLocation currentLocation = null; 
    CLLocationManager LocMgr = new CLLocationManager(); 
    if (CLLocationManager.LocationServicesEnabled) 
    { 

     if (UIDevice.CurrentDevice.CheckSystemVersion (6, 0)) 
     { 
      LocMgr.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) => 
      { 
       currentLocation = e.Locations [e.Locations.Length - 1]; 
      }; 
     } 
     else 
     { 
      LocMgr.UpdatedLocation += (object sender, CLLocationUpdatedEventArgs e) => 
      { 
       currentLocation = e.NewLocation; 
      }; 
     } 
     LocMgr.StartUpdatingLocation(); 
     LocMgr.Failed += (object sender, NSErrorEventArgs e) => 
     { 
      Console.WriteLine (e.Error); 
     }; 
    } 
    else 
    { 
     currentLocation = null; 
     Console.WriteLine ("Location services not enabled, please enable this in your Settings"); 
    } 
    if (currentLocation != null) 
    { 
     LocationDetector.Instance.UpdateCurrentArea (new MyLatLng (currentLocation.Coordinate.Latitude, currentLocation.Coordinate.Longitude)); 
    } 
    return currentLocation; 

} 

ответ

1

Если я понять ваш вопрос правильно.

При отображении диалогового окна, вы желаете, чтобы остановки выполнения текущего метода от дальнейшего выполнения до пользователь не выбирает ответ диалогового окна.

После того, как они выбрали ответ, вы бы тогда как на продолжить выполнение кода в одной и той же функции, эффективно достигать вашей «пауза», что вы после этого.

Для достижения этой цели в прошивке вы можете использовать TaskCompletionSource.

В приведенном ниже примере сначала отображается диалоговое окно с запросом пользователя, хочет ли он кофе, а затем ждет ответа пользователя.

После того, как пользователь отвечает, он продолжает выполнение в рамках одной и той же функции и отображает дополнительное окно сообщения, которое зависит от выбора, сделанного пользователем.

 UIButton objButton1 = new UIButton (UIButtonType.RoundedRect); 
     objButton1.SetTitle ("Click Me", UIControlState.Normal); 
     objButton1.TouchUpInside += (async (o2, e2) => { 
      int intCoffeeDispenserResponse = await ShowCoffeeDispenserDialogBox(); 
      // 
      switch (intCoffeeDispenserResponse) 
      { 
      case 0: 
       UIAlertView objUIAlertView1 = new UIAlertView(); 
       objUIAlertView1.Title = "Coffee Dispenser"; 
       objUIAlertView1.Message = "I hope you enjoy the coffee."; 
       objUIAlertView1.AddButton("OK"); 
       objUIAlertView1.Show(); 
       break; 
      case 1: 
       UIAlertView objUIAlertView2 = new UIAlertView(); 
       objUIAlertView2.Title = "Coffee Dispenser"; 
       objUIAlertView2.Message = "OK - Please come back later when you do."; 
       objUIAlertView2.AddButton("OK"); 
       objUIAlertView2.Show(); 
       break; 
      } 
     }); 
     // 
     View = objButton1; 


    private Task<int> ShowCoffeeDispenserDialogBox() 
    { 
     TaskCompletionSource<int> objTaskCompletionSource1 = new TaskCompletionSource<int>(); 
     // 
     UIAlertView objUIAlertView1 = new UIAlertView(); 
     objUIAlertView1.Title = "Coffee Dispenser"; 
     objUIAlertView1.Message = "Do you want some coffee?"; 
     objUIAlertView1.AddButton("Yes"); 
     objUIAlertView1.AddButton("No"); 
     // 
     objUIAlertView1.Clicked += ((o2, e2) => { 
      objTaskCompletionSource1.SetResult(e2.ButtonIndex); 
     }); 
     // 
     objUIAlertView1.Show(); 
     // 
     return objTaskCompletionSource1.Task; 
    } 
Смежные вопросы