2015-10-29 3 views
-2

Я работаю над приложением xamarin android с использованием Mvvm Light, и у меня есть метод, который я вызываю, и я бы хотел изменить его на метод async, но я не знаю как. Просто любопытно, как это сделать. Это для приложения Xamarin Android в Visual Studio,Как настроить и вызвать метод Async

вызова метода:

protected override void onResume() 
    { 
     ObservableCollection locObs = Vm.ShowLocations(); 
    } 

Метод:

public ObservableCollection<Location> ShowLocations() 
    { 
     if (Debugger.IsAttached) 
     { 
      if (Locations != null) 
      { 
       var locationsCopy = Locations.ToList(); 
       Locations = new ObservableCollection<Location>(locationsCopy); 
      } 
      Election elec = IntentManager.Instance.CurrentElection; 
      elec.Locations = new System.Collections.ObjectModel.ObservableCollection<Location>(); 
      Location loc = new Location(); 
      loc.Name = "Alan Middle School"; 
      loc.Address = "300 S. County Farm Road"; 
      elec.Locations.Add(loc); 
      Location loc2 = new Location(); 
      loc2.Name = "Bill High School"; 
      loc2.Address = "100 S. County Farm Road"; 
      elec.Locations.Add(loc2); 
      Location loc3 = new Location(); 
      loc3.Name = "Cameron Fire Station"; 
      elec.Locations.Add(loc3); 
      Location loc4 = new Location(); 
      loc4.Name = "Danvill Senior Center"; 
      elec.Locations.Add(loc4); 

      Locations = elec.Locations; 
     } 
     return Locations; 
    } 
+2

В этом методе нет асинхронных вызовов. Пометить его как асинк не сделало бы ничего. – Jason

+0

В Java вы должны использовать 'AsyncTask'. Вот [Xamarin Documentation] (https://developer.xamarin.com/api/type/Android.OS.AsyncTask/) в этом классе. –

+0

@ Джейсон Я никогда не говорил, что есть. Я спрашиваю, как это сделать. – yams

ответ

1

это будет заменен вызова службы. Временно я просто прошу советов по Async или примерам.

После того как вы вызова службы, вы можете вызвать его асинхронно с await как таковой:

var locations = await GetLocationsAsync(); 
elec.Locations = new ObservableCollection<Location>(locations); 

Это требует метод вызова быть async, как таковой:

public async Task<ObservableCollection<Location>> ShowLocationsAsync() 
{ 
    var locations = await GetLocationsAsync(); 
    elec.Locations = new ObservableCollection<Location>(locations); 
    return elec.Locations; 
} 

Какие затем можно назвать следующим:

protected override async void onResume() 
{ 
    ObservableCollection locObs = await Vm.ShowLocationsAsync(); 
} 
+0

Интересно. Таким образом, основными частями этого является ожидание и что метод caling должен быть асинхронным. Асинхронный вызов по-прежнему работает на нити ui, хотя и прав (хотя и асинхронно) по сравнению с фоном? – yams

+0

И не хотите ли вы позвонить из исходного метода из задачи? – yams

+0

@ HisnamewasRobertPaulson: В этом примере, да, весь код работает в потоке пользовательского интерфейса асинхронно. Других потоков нет. Я не уверен, что вы подразумеваете под «сделать вызов из задачи». –

Смежные вопросы