public Task Show() { var currentPage = ((App)Application.Current).RootFrame.Content as PhoneApplicationPage; var layoutroot = currentPage.Content as Grid; layoutroot.Children.Add(this); AsyncResult = new FSAsyncResult(); if (string.IsNullOrWhiteSpace(Place.Id)) { ActionText.Text = Localized.PlaceEditorAdd; } else { ActionText.Text = Localized.PlaceEditorEdit; } EnableMenu(false); return(Task.Run(() => { AsyncResult.AsyncWaitHandle.WaitOne(); AsyncResult.Dispose(); Deployment.Current.Dispatcher.BeginInvoke(() => { layoutroot.Children.Remove(this); EnableMenu(true); }); } )); }
public Task <ContactData> GetContactData(string email) { FSAsyncResult task; var started = DateTimeOffset.UtcNow; //FSLog.Debug("start:", email); lock (Tasks) { lock (Contacts) { if (Contacts.ContainsKey(email)) { return(Task <ContactData> .Run(() => { FSLog.Debug("end:", email, DateTimeOffset.Now - started); return Contacts[email]; })); } } // See if search started for this email if (Tasks.ContainsKey(email)) { task = Tasks[email]; } else // Not running already { task = new FSAsyncResult(); Tasks[email] = task; //Start the asynchronous search. Contacts cons = new Contacts(); //Identify the method that runs after the asynchronous search completes. cons.SearchCompleted += (object sender, ContactsSearchEventArgs e) => { FSLog.Info("SearchCompleted:", email); ContactData data = new ContactData(); data.DisplayName = email; // Grab first match foreach (Contact con in e.Results) { data.IsFound = true; //No results if (!string.IsNullOrWhiteSpace(con.DisplayName)) { data.DisplayName = con.DisplayName; } System.IO.Stream stream = con.GetPicture(); if (stream != null) { BitmapImage img = new BitmapImage(); img.SetSource(stream); data.Photo = img; break; } } lock (Contacts) { Contacts[email] = data; } task.IsCompleted = true; }; cons.SearchAsync(email, FilterKind.EmailAddress, task); } } return(Task <ContactData> .Run(() => { //FSLog.Debug("wait:", email); task.Wait(); lock (Tasks) { Tasks.Remove(email); task.Dispose(); } lock (Contacts) { //FSLog.Debug("end:", email, DateTimeOffset.Now - started); return Contacts[email]; } })); }