Tôi đang sử dụng chuỗi nền để khởi tạo công cụ qua USB. Giao diện người dùng bị treo khi tôi cố mở thiết bị. Tôi hy vọng chuỗi nền sẽ tạm dừng khi gọi Mở trên thiết bị chứ không phải là chuỗi giao diện người dùng. Tôi đang thử nghiệm điều này mà không có tương tác UI từ chủ đề nền. Tôi không biết làm thế nào để gỡ lỗi vấn đề, và nó quá rộng một câu hỏi, nhưng có lẽ ai đó đã nhìn thấy một cái gì đó như thế này trước đây. Không có gì sai với interop ActiveX như xa như tôi biết, thiết bị hoạt động chính xác. Đây là cách tiếp cận chung:Làm thế nào một chủ đề nền có thể treo chuỗi giao diện người dùng?
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.
}
}
}
}
Chỉnh sửa: Có lẽ không rõ ý tôi là gì. Bằng cách 'treo' tôi nên nói 'bị đóng băng trong giây lát'.
UI chỉ đóng băng trong một giây và tôi không biết cách ngắt trong trình gỡ lỗi trong trường hợp này. Nhưng bạn đã cho tôi một ý tưởng để đặt dòng mới 'FancyVoltmeter()' trong trình xử lý chuỗi 'UpdateMeter'. Giao diện người dùng không còn bị đóng băng nữa và điều này rất thú vị. –