c# – 后台线程如何挂起UI线程?

我正在使用后台线程来通过USB初始化仪器.当我尝试打开设备时,UI挂起.我希望后台线程在设备上调用Open时暂停,但不是UI线程.我正在测试这个没有来自后台线程的UI交互.我不知道如何调试这个问题,这个问题太广泛了,但也许有人之前见过这样的事情.据我所知,ActiveX互操作没有任何问题,设备正常工作.这是一般方法:

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.
            }
        }
    }
}

编辑:也许不清楚我的意思.通过’挂’我应该说’暂时冻结’.

最佳答案
仪表是否需要在STA中运行?由于这个原因,对Open()的调用是否实际上被编组回UI线程?

您可以通过查看调试器中挂起的UI线程的callstack来验证这是真的.

转载注明原文:c# – 后台线程如何挂起UI线程? - 代码日志