我正在使用一个后台线程通过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.
}
}
}
}
编辑:可能不太清楚我想表达的意思。我应该说“卡顿短暂地停止运行”。