private void btnSynchronize_Click(object sender, RoutedEventArgs e) { if (Service != null && LicenseSet != null) { BackgroundWorker worker = new BackgroundWorker(); loadingAnimation.Visibility = Visibility.Visible; List <string> keysToUpload = new List <string>(); foreach (string k in _localKeys) { if (_serviceKeys.Contains(k) == false) { keysToUpload.Add(k); } } worker.DoWork += delegate(object s, DoWorkEventArgs args) { object[] data = args.Argument as object[]; IServicesService servicesService = ObjectLocator.GetInstance <IServicesService>(); ILicenseSetService licenseSetService = ObjectLocator.GetInstance <ILicenseSetService>(); servicesService.AddLicenseKeysToService(licenseSetService.GetLiceseSetById((int)data[2]), (Service)data[1], (List <string>)data[0]); List <string> serviceKeys = servicesService.GetServiceLicenseKeysForSet(licenseSetService.GetLiceseSetById((int)data[2]), (Service)data[1]); args.Result = serviceKeys; }; worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args) { _serviceKeys = (List <string>)args.Result; UpdateData(); loadingAnimation.Visibility = Visibility.Collapsed; }; worker.RunWorkerAsync(new object[] { keysToUpload, Service, LicenseSet.LicenseSetId }); } }