Estoy usando un hilo de fondo para inicializar un instrumento a través de USB. La IU se bloquea cuando intento abrir el dispositivo. Esperaría que el hilo de fondo se detenga al llamar a Abrir en el dispositivo, pero no al hilo de la interfaz de usuario. Estoy probando esto sin interacción UI del hilo de fondo. No sé cómo solucionar el problema, y es una pregunta demasiado amplia, pero tal vez alguien haya visto algo como esto antes. No hay nada malo con la interoperabilidad de ActiveX hasta donde yo sé, el dispositivo funciona correctamente. Este es el enfoque general:¿Cómo puede un hilo de fondo colgar el hilo de la interfaz de usuario?
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.
}
}
}
}
Editar: Quizás no sea claro lo que quise decir. Por 'colgar' debería decir 'se congela momentáneamente'.
La interfaz de usuario se congela sólo por un segundo y no sé cómo romper en el depurador en este caso. Pero me dio una idea para poner la 'nueva línea FancyVoltmeter()' en el manejador de subprocesos 'UpdateMeter'. La IU ya no se congela, y esto es muy interesante. –