title: The calling thread cannot access this object because a different thread owns it
body: <p>My code is as below    </p>
  
  <pre><code>public CountryStandards()
  {
      InitializeComponent();
      try
      {
          FillPageControls();
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message, "Country Standards", MessageBoxButton.OK, MessageBoxImage.Error);
      }
  }
  
  /// &lt;summary&gt;
  /// Fills the page controls.
  /// &lt;/summary&gt;
  private void FillPageControls()
  {
      popUpProgressBar.IsOpen = true;
      lblProgress.Content = "Loading. Please wait...";
      progress.IsIndeterminate = true;
      worker = new BackgroundWorker();
      worker.DoWork += new System.ComponentModel.DoWorkEventHandler(worker_DoWork);
      worker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(worker_ProgressChanged);
      worker.WorkerReportsProgress = true;
      worker.WorkerSupportsCancellation = true;
      worker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
      worker.RunWorkerAsync();                    
  }
  
  private void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
  {
      GetGridData(null, 0); // filling grid
  }
  
  private void worker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
  {
      progress.Value = e.ProgressPercentage;
  }
  
  private void worker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
  {
      worker = null;
      popUpProgressBar.IsOpen = false;
      //filling Region dropdown
      Standards.UDMCountryStandards objUDMCountryStandards = new Standards.UDMCountryStandards();
      objUDMCountryStandards.Operation = "SELECT_REGION";
      DataSet dsRegionStandards = objStandardsBusinessLayer.GetCountryStandards(objUDMCountryStandards);
      if (!StandardsDefault.IsNullOrEmptyDataTable(dsRegionStandards, 0))
          StandardsDefault.FillComboBox(cmbRegion, dsRegionStandards.Tables[0], "Region", "RegionId");
  
      //filling Currency dropdown
      objUDMCountryStandards = new Standards.UDMCountryStandards();
      objUDMCountryStandards.Operation = "SELECT_CURRENCY";
      DataSet dsCurrencyStandards = objStandardsBusinessLayer.GetCountryStandards(objUDMCountryStandards);
      if (!StandardsDefault.IsNullOrEmptyDataTable(dsCurrencyStandards, 0))
          StandardsDefault.FillComboBox(cmbCurrency, dsCurrencyStandards.Tables[0], "CurrencyName", "CurrencyId");
  
      if (Users.UserRole != "Admin")
          btnSave.IsEnabled = false;
  
  }
  
  /// &lt;summary&gt;
  /// Gets the grid data.
  /// &lt;/summary&gt;
  /// &lt;param name="sender"&gt;The sender.&lt;/param&gt;
  /// &lt;param name="pageIndex"&gt;Index of the page.( used in case of paging)   &lt;/pamam&gt;
  private void GetGridData(object sender, int pageIndex)
  {
      Standards.UDMCountryStandards objUDMCountryStandards = new Standards.UDMCountryStandards();
      objUDMCountryStandards.Operation = "SELECT";
      objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null;
      DataSet dsCountryStandards = objStandardsBusinessLayer.GetCountryStandards(objUDMCountryStandards);
      if (!StandardsDefault.IsNullOrEmptyDataTable(dsCountryStandards, 0) &amp;&amp; (chkbxMarketsSearch.IsChecked == true || chkbxBudgetsSearch.IsChecked == true || chkbxProgramsSearch.IsChecked == true))
      {
          DataTable objDataTable = StandardsDefault.FilterDatatableForModules(dsCountryStandards.Tables[0], "Country", chkbxMarketsSearch, chkbxBudgetsSearch, chkbxProgramsSearch);
          dgCountryList.ItemsSource = objDataTable.DefaultView;
      }
      else
      {
          MessageBox.Show("No Records Found", "Country Standards", MessageBoxButton.OK, MessageBoxImage.Information);
          btnClear_Click(null, null);
      }
  }
  </code></pre>
  
  <p>The step <code>objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null;</code> in get grid data throws exception </p>
  
  <blockquote>
    <p>The calling thread cannot access this object because a different
    thread owns it.</p>
  </blockquote>
  
  <p>What's wrong here?</p>