【发布时间】:2010-07-22 16:30:51
【问题描述】:
我正在使用后台线程通过 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.
}
}
}
}
编辑:也许不清楚我的意思。通过“挂起”,我应该说“暂时冻结”。
【问题讨论】:
标签: c# winforms multithreading