title: How can I pause thread?
body: <p>Relevant code:</p>
  
  <pre><code>private static Thread m_thread = null;
  private static Boolean m_stop = false;
  
  public static Boolean Start(SearcherParams pars)
  {
      Boolean success = false;
  
      if (m_thread == null)
      {
          // Perform a reset of all variables,
          // to ensure that the state of the searcher is the same on every new start:
          ResetVariables();
  
          // Remember the parameters:
          m_pars = pars;
  
          // Start searching for FileSystemInfos that match the parameters:
          m_thread = new Thread(new ThreadStart(SearchThread));
          m_thread.Start();
  
          success = true;
      }
  
      return success;
  }
  
  private static void SearchThread()
  {
      Boolean success = true;
      String errorMsg = "";
  
      // Search for FileSystemInfos that match the parameters:
      if ((m_pars.SearchDir.Length &gt;= 3) &amp;&amp; (Directory.Exists(m_pars.SearchDir)))
      {
          if (m_pars.FileNames.Count &gt; 0)
          {
              // Convert the string to search for into bytes if necessary:
              if (m_pars.ContainingChecked)
              {
                  if (m_pars.ContainingText != "")
                  {
                      try
                      {
                          m_containingBytes = 
                              m_pars.Encoding.GetBytes(m_pars.ContainingText);
                      }
                      catch (Exception)
                      {
                          success = false;
                          errorMsg = "The string\r\n" + m_pars.ContainingText +
                                      "\r\ncannot be converted into bytes.";
                      }
                  }
                  else
                  {
                      success = false;
                      errorMsg = "The string to search for must not be empty.";
                  }
              }
  
              if (success)
              {
                  // Get the directory info for the search directory:
                  DirectoryInfo dirInfo = null;
  
                  try
                  {
                      dirInfo = new DirectoryInfo(m_pars.SearchDir);
                  }
                  catch (Exception ex)
                  {
                      success = false;
                      errorMsg = ex.Message;
                  }
  
                  if (success)
                  {
                      // Search the directory (maybe recursively),
                      // and raise events if something was found:
                      SearchDirectory(dirInfo);
                  }
              }
          }
          else
          {
              success = false;
              errorMsg = "Please enter one or more filenames to search for.";
          }
      }
      else
      {
          success = false;
          errorMsg = "The directory\r\n" + m_pars.SearchDir + "\r\ndoes not exist.";
      }
  
      // Remember the thread has ended:
      m_thread = null;
  
      // Raise an event:
      if (ThreadEnded != null)
      {
          ThreadEnded(new ThreadEndedEventArgs(success, errorMsg));
      }
  }
  
  private static void SearchDirectory(DirectoryInfo dirInfo)
  {
      if (!m_stop)
      {
          try
          {
              foreach (String fileName in m_pars.FileNames)
              {
                  FileSystemInfo[] infos = dirInfo.GetFileSystemInfos(fileName);
  
                  foreach (FileSystemInfo info in infos)
                  {
                      if (m_stop)
                      {
                          break;
                      }
  
                      if (MatchesRestrictions(info))
                      {
                          // We have found a matching FileSystemInfo, 
                          // so let's raise an event:
                          if (FoundInfo != null)
                          {
                              FoundInfo(new FoundInfoEventArgs(info));
                          }
                      }
                  }
              }
  
              if (m_pars.IncludeSubDirsChecked)
              {
                  DirectoryInfo[] subDirInfos = dirInfo.GetDirectories();
  
                  foreach (DirectoryInfo subDirInfo in subDirInfos)
                  {
                      if (m_stop)
                      {
                          break;
                      }
  
                      // Recursion:
                      SearchDirectory(subDirInfo);
                  }
              }
          }
          catch (Exception)
          {
          }
      }
  }          
  </code></pre>
  
  <p>The stop is working fine I wanted to add also a pause button to pause and resume the thread.
  I added a button click event but how do I make the pause/resume actions and where?</p>
  
  <p>This is a link for the complete code : <a href="https://pastebin.com/fYYnHBB6" rel="nofollow noreferrer">https://pastebin.com/fYYnHBB6</a></p>