private void ButtonRefresh_Click(object sender, RoutedEventArgs e) { var isClearCache = CheckBoxClearCache.IsChecked ?? false; new Thread(() => { try { Dispatcher.Invoke(() => settings.Password = ((PasswordBox)((Button)sender).CommandParameter).Password); // PasswordBox doesn't allow 2 way binding, so we have to manually read it settings.Dirty = true; UpdateStatus("Re-initialising data ...", true); InitActions(isClearCache); UpdateStatus("-- Finished re-initialising data ...", false); if (isClearCache) { CrmDataHelper.ClearCache(); } } catch (Exception exception) { PopException(exception); } finally { Dispatcher.Invoke(() => CheckBoxClearCache.IsChecked = false); UpdateStatus("", false); } }).Start(); }