title: C# Background Worker UI Update
body: <p>I am trying to use a background worker in order to retrieve a large amount of data from the database without stalling the main thread.  This seems to work well, except that when it comes to update the UI, the update freezes the screen.  Relevant code as follows:</p>
  
  <pre><code>    private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
      {               
          lvwTest.BeginUpdate();
          lvwTest.Items.Clear();
  
          // Populate the UI
          foreach (TestItem ti in testData)
          {
              ListViewItem lvi = lvwTest.Items.Add(ti.Value1);
              lvi.SubItems.Add(ti.Value2);
          }
  
          lvwTest.EndUpdate();                     
      }
  </code></pre>
  
  <p>The update takes around 2 - 3 seconds, for which time the screen is locked.  I realise that only the main thread can update the screen, but is it possible to load this data into memory in some way (in a background thread or another instance of a listview or something) and then just display it?  All I want to happen is for the program to simply refresh the data without taking up time in the main thread.</p>