title: C#: RunWorkerAsync() doesn't trigger DoWork()
body: <p>I am writing a small forms based application to connect to an LDAP server, and I wanted the "connect" button to work in the background.  So I was following the information and discussion
  <a href="https://stackoverflow.com/questions/3065700/how-to-start-and-stop-a-continuously-running-background-worker-using-a-button">here</a> </p>
  
  <p>but for whatever reason my code doesn't appear to be working right:  I set a breakpoint at 'worker.RunWorkerAsync();'  And it just steps right through it.</p>
  
  <p>What am I doing wrong?  I am working in Visual Studio 2010, in case it matters.
  </p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  using System.DirectoryServices;
  using System.Threading;
  
  namespace ldapconnect
  {
  
  
  public partial class Form1 : Form
  {
      private void Form1_Load(object sender, EventArgs e)
      {
  
      }
  
      public Form1()
      {
          InitializeComponent();
      }
  
      //server
      public string lds;
      //naming context
      public string root;
  
      public string username;
      public string password;
  
      BackgroundWorker worker = new BackgroundWorker();
  
      private void worker_DoWork(object sender, DoWorkEventArgs e)
      {
          worker = sender as BackgroundWorker;
          foreach (string s in connect(worker, e, lds + "/" + root, txt_user.Text.ToString(), txt_pass.Text.ToString()))
          {
              rtb_results.Text += s + "\r\n";
          }
      }
  
      private List&lt;string&gt; connect(BackgroundWorker worker, DoWorkEventArgs e, String serv, string usr, string pass)
      {
          //Directory search code taking server path and creds passed in from form
          DirectoryEntry conn = new DirectoryEntry(serv, usr, pass);
          DirectorySearcher ds = new DirectorySearcher(conn);
  
          //I only want users
          ds.Filter = "objectClass=user";
  
          List&lt;string&gt; sendBack = new List&lt;string&gt;();
  
          try
          {
              SearchResultCollection results = ds.FindAll();
  
              foreach (SearchResult result in results)
              {
                  sendBack.Add(result.ToString());                    
              }                
          }
          catch (Exception ex)
          {
              sendBack.Clear();
              sendBack.Add(ex.ToString());
          }
  
          return sendBack;
      }
  
      //connect button start background worker
      private void btn_connect_Click(object sender, EventArgs e)
      {
          worker.RunWorkerAsync();
      }
  
      //Exit Button
      private void btn_close_Click(object sender, EventArgs e)
      {
          this.Close();
      }
  
      //set server path
      private void btn_server_Click(object sender, EventArgs e)
      {
          string serv = inputBox("ldap://", "IP or DNS Name of LDS Server", "");
          lds = serv;
          lbl_server.Text = lds;
      }
  
      //set default context
      private void btn_context_Click(object sender, EventArgs e)
      {
          string cntx = inputBox("In CN=,DC=,DC= Form:", "Default Naming Context", "");
          root = cntx;
          lbl_cntx.Text = root;
      }
  
      //VB interaction box
      private string inputBox(string a,string b,string c)
      {
          return Microsoft.VisualBasic.Interaction.InputBox(a, b, c);
      }
  
      private void btn_Defaults_Click(object sender, EventArgs e)
      {
          lds = "LDAP://127.0.0.1";
          root = "DC=USERS,DC=TEST,DC=LOCAL";
          txt_user.Text = "reader";
          txt_pass.Text = "password";
          lbl_server.Text = lds;
          lbl_cntx.Text = root;
      }
  }
  }
  </code></pre>