title: Time out problem with thread in ASP.NET
body: <p>In my website, I am using a thread to perform a process in background. I start the thread on a button click.</p>
  
  <p>Now the problem I face is that it seems to time out and stop. Basically it stops updating the database.</p>
  
  <p>What could be wrong?</p>
  
  <p>Here is my code:</p>
  
  <pre><code> public static class BackgroundHelper 
   {
      private static readonly object _syncRoot = new object(); 
      private static readonly ManualResetEvent _event = new ManualResetEvent(false); 
      private static Thread _thread;
      public static bool Running 
      { 
          get; 
          private set;
      }
      public static void Start()
      {    
          lock (_syncRoot) 
          {
            if (Running)
                  return; 
              Running = true;
              // Reset the event so we can use it to stop the thread.
              _event.Reset(); 
              // Star the background thread.
              _thread = new Thread(new ThreadStart(BackgroundProcess)); 
              _thread.Start();
          }
      }
  
      public static void Stop()   
      {
          lock (_syncRoot)
          {
              if (!Running)
                  return;
              Running = false; 
              // Signal the thread to stop.
              _event.Set();
              // Wait for the thread to have stopped.
              _thread.Join(); 
              _thread = null;
          } 
      }   
  
      private static void BackgroundProcess()  
      { 
          int count = 0;
          DateTime date1 = new DateTime(2011, 2, 5);
          while (System.DateTime.Compare(System.DateTime.Now, date1) &lt; 0)
          {
              downloadAndParse();  
              // Wait for the event to be set with a maximum of the timeout. The
              // timeout is used to pace the calls to downloadAndParse so that 
              // it not goes to 100% when there is nothing to download and parse.
              bool result = _event.WaitOne(TimeSpan.FromSeconds(45));
              // If the event was set, we're done processing.
             // if (result)
               //   break;
              count++; 
          }
      }
  
      private static void downloadAndParse()
      {
          NewHive.MyServ newServe = new NewHive.MyServ();
          NewHive.CsvDownload newService = new NewHive.CsvDownload();
          //NewHive.MyServ newServe = new NewHive.MyServ();
          string downloadSuccess = newService.CsvDownloader();
          if (downloadSuccess == "Success")
          {
              string parseSuccess = newService.CsvParser();
  
          }
          newServe.updateOthersInPosition();
      }
  }
  </code></pre>