private void DispatchResult(Action<LoginResult> callback, LoginResult result) { Deployment.Current.Dispatcher.BeginInvoke(() => { this.LogingIn = false; callback.Invoke(result); }); }
public void Login(Action<LoginResult> callback) { var errorMessage = string.Empty; if (!this.Validate(out errorMessage)) { callback.Invoke(new LoginResult { IsAuthenticated = false, Description = errorMessage }); return; } this.LogingIn = true; var context = App.CreateTfsDataServiceContext(); var requestUri = new Uri(string.Format(CultureInfo.InvariantCulture, "{0}/Projects?$top=1&$select=Name", this.Endpoint), UriKind.Absolute); context.BeginExecute<Project>( requestUri, r => { try { var result = context.EndExecute<Project>(r) as QueryOperationResponse<Project>; if (result != null) { // Save the valid credentials in the Isolated Storage IsolatedStorageHelper.ClearCredentials(App.IsolatedStorageFileName); IsolatedStorageHelper.SaveCredentials(this, App.IsolatedStorageFileName); this.DispatchResult(callback, new LoginResult { IsAuthenticated = true, Description = string.Empty }); } } catch (Exception ex) { Exception dataServiceException; var result = new LoginResult { IsAuthenticated = false, Description = ex.Message }; if (DataServiceExceptionUtil.TryParse(ex, out dataServiceException)) { result.Description = dataServiceException.Message; } else if (ex.InnerException != null) { result.Description = ex.InnerException.Message; } this.DispatchResult(callback, result); } }, null); }