Когда пользователь нажмите на значок приложения, Я хочу, чтобы сделать эти шаги, прежде чем пользователь перейти на главный экранПодготовка данных, прежде чем перейти к главному экрану
- Fetch JSon строку из URI
- Использование JArray.Parse для получения значения
- В конце концов, перейдите на основной экран.
Проблема заключается в том, как я могу предотвратить пользователю перейти к главному экрану и поместить весь код
Я пытался поставить его в методе Application_Launching в App.xaml.cs файл
// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
// code here
}
Но это не мешает программе перейти к основному виду до завершения фида.
И я обнаружил, что на самом деле в MainPage.xaml, если я ставлю этот код, как этот
protected override void OnNavigatedTo(NavigationEventArgs e)
{
while(true) {}
// it will prevent the program to go to the main view,
// and will stick with the loading screen until this function reach its end
}
Так что я думаю, я могу поставить весь код здесь, когда я закончу выборки, я буду просто разорвать в то время как он автоматически перейдет к основному виду.
И я стараюсь, это код
protected override void OnNavigatedTo(NavigationEventArgs e)
{
bool isFetchFinished = false;
ObservableCollection<PromoViewModel> Promos = new ObservableCollection<PromoViewModel>();
WebClient client = new WebClient();
client.DownloadStringCompleted += (s, evt) =>
{
if (evt.Error == null)
{
// Retrieve the JSON
string jsonString = evt.Result;
JArray promos = JArray.Parse(jsonString);
foreach (JObject promo in promos)
{
string name = promo["name"].Value<string>();
string description = promo["description"].Value<string>();
string img = promo["image"].Value<string>();
Promos.Add(new PromoViewModel() { Name = name, Description = description, Img = img });
}
isFetchFinished = true;
System.Diagnostics.Debug.WriteLine("finish fetch");
}
};
// run
client.DownloadStringAsync(new Uri("the json url"));
while(true) {
if(isFetchFinished) {
App.ViewModel.LoadData(Promos); // pass value to main view model
break; // after complete, break
}
}
}
Я думал, что это будет работать, но это не было.
Это то, что я нашел,
WebClient DownloadStringAsync не запускается до завершения функции OnNavigatedTo.
Потому что он все еще ждет, пока цикл while разобьется и достигнет конечной функции.
И это
isFetchFinished = true; // will never executed
Результирующая бесконечный цикл.
Я думаю, что я поместил код извлечения в неправильный метод. Где подходящее место, чтобы положить все это?
спасибо, брат, я пришел из мира iOS, так что это способ iOS для этого. Я не знаю, в Windows Phone, чтобы загрузить данные, мы должны создать новое представление. Можете ли вы показать мне небольшой синтаксис? –
Я не говорил, что вам нужно * создать новое представление, я сказал, что вы * можете * создать другую стартовую страницу - ту, которая отобразит некоторый текст «загрузка ...», пока данные не закончат загрузку, а затем автоматически пользователя на фактическую стартовую страницу. –