title: C# async/await write to textbox
body: <p>Needless to say I'm new to C# and doing some basic things to learn along the way. I'm trying to understand async/await feature. I have a form with 2 textboxes and a button. When I click the button, it checks a remote computer's service status (in this case remote registry. While it checks, it writes that it is checking the registry and tells the user to wait. Then starts if the state is stopped and gets some values I look for and writes those to the second textbox. </p>
  
  <p>My code works, and I'm able to get my values. But the GUI freezes during this time. I tried to implement backgroundworker, thread and Async/Wait with no success. I tried doing Task and couldn't get that to work. </p>
  
  <p>All the examples shown here or on other sites simply return int while I'm trying to return a string that writes the status and the values I want to textboxes. I tried to convert it to string with no success. </p>
  
  <p>Long story short, for this type of processes, what would be a better approach? Can someone show me how and comment what does what along the way just so I understand better? I want to learn how to do it but at the same time learn why and learn to write cleaner code. </p>
  
  <p>Thank you everyone for taking their time in advance. </p>
  
  <pre><code>string ComputerName = "Lab01";
      public frmRegChecker()
      {
          InitializeComponent();
      }
  
  
      private void Button1_Click(object sender, EventArgs e)
      {
        Check_Status();        
  
      }
  
      private void Check_Status()
      {
          TxtBoxstatus.AppendText("Checking Remote Registry service status on computer : " + ComputerName);
          TxtBoxstatus.AppendText(Environment.NewLine);
          TxtBoxstatus.AppendText("Please wait... ");
  
           ServiceController sc = new ServiceController("RemoteRegistry", ComputerName);
              try
              {
  
  
                  TxtBoxstatus.AppendText("The Remote Registry service status is currently set to : " + sc.Status.ToString());
                  TxtBoxstatus.AppendText(Environment.NewLine);
  
  
                  if (sc.Status == ServiceControllerStatus.Stopped)
                  {
  
                      // Start the service if the current status is stopped.
  
                      TxtBoxstatus.AppendText("Starting Remote Registry service...");
                      TxtBoxstatus.AppendText(Environment.NewLine);
                      try
                     {
                         // Start the service, and wait until its status is "Running".
                          sc.Start();
                          sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 3));
                          sc.Refresh();
                          sc.WaitForStatus(ServiceControllerStatus.Running);
  
                          // Display the current service status.
                          TxtBoxstatus.AppendText("The Remote Registry status is now set to:" + sc.Status.ToString());
                         richTextBox1.AppendText(Environment.NewLine);
                          try
                          {
                             var reg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ComputerName);
                              var key = reg.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\");
                              string _OSVersion = (key.GetValue("CurrentVersion")).ToString();
                             richTextBox1.AppendText("OS version is : " + _OSVersion);
                              richTextBox1.AppendText(Environment.NewLine);
                         }
                          catch (InvalidOperationException)
                         {
  
                              richTextBox1.AppendText("Error getting registry value from" + ComputerName);
                              richTextBox1.AppendText(Environment.NewLine);
                          }
                      }
                      catch (InvalidOperationException)
                      {
  
                          richTextBox1.AppendText("Could not start the Remote Registry service.");
                          richTextBox1.AppendText(Environment.NewLine);
                      }
                  }
                  else if (sc.Status == ServiceControllerStatus.Running)
                 {
                     try
                     {
                       var reg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ComputerName);
                       var key = reg.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\");
                              string _OSVersion = (key.GetValue("CurrentVersion")).ToString();
                       richTextBox1.AppendText("OS version is : " + _OSVersion);
                       richTextBox1.AppendText(Environment.NewLine);
                      }
                      catch (InvalidOperationException)
                      {
  
                              richTextBox1.AppendText("Error getting registry value from" + ComputerName);
                              richTextBox1.AppendText(Environment.NewLine);
                      }
  
                  }
             }
  
            }
            catch
             {                  
               richTextBox1.AppendText("Error getting registry value from " + ComputerName);
               richTextBox1.AppendText(Environment.NewLine);
  
             }
  }
  </code></pre>