title: How can a background thread hang the UI thread?
body: <p>I am using a background thread to initialize an instrument over USB. The UI hangs when I try to open the device. I would expect the background thread to pause when calling Open on the device, but not the UI thread. I am testing this with no UI interaction from the background thread. I don't know how to debug the problem, and it's too broad a question, but perhaps someone has seen something like this before. There is nothing wrong with the ActiveX interop as far as I know, the device works correctly. This is the general approach:</p>
  
  <pre><code>using System;
  using FancyVoltmeterLibrary;
  
  namespace SOQuestion
  {
      public class MeterClass
      {
          private FancyVoltmeter meter;
          private Thread meterThread;
  
          public MeterClass()
          {
              // Create instance of ActiveX/COM object.
              meter = new FancyVoltmeter();
  
              meterThread = new Thread(UpdateMeter);
              meterThread.Name = "Meter Thread";
              meterThread.Priority = ThreadPriority.Normal;
              meterThread.IsBackground = true;
              meterThread.Start();
          }
  
          private void UpdateMeter()
          {
              while(true)
              {
                  Thread.Sleep(1000);
                  if(!meter.IsOpen())
                  {
                      // Meter may be powered off here.
                      // The call to Open takes about 1 second. 
                      // UI hangs during the call???
                      meter.Open();
                  }
                  // code to read meter goes here.
              }
          }
      }
  }
  </code></pre>
  
  <p>Edit: Perhaps unclear what I meant. By 'hang' I should say 'freezes momentarily'.</p>