मैं यूएसबी पर एक उपकरण शुरू करने के लिए पृष्ठभूमि धागे का उपयोग कर रहा हूँ। जब मैं डिवाइस खोलने का प्रयास करता हूं तो 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.
}
}
}
}
संपादित करें: शायद अस्पष्ट मेरा मतलब क्या है। 'लटका' से मुझे कहना चाहिए कि 'क्षणिक रूप से जम जाता है'।
यूआई एक पल के लिए ही जमा और मैं कैसे इस मामले में डीबगर में तोड़ने के लिए पता नहीं है में बाहर इस में पाया गया कि। लेकिन आपने मुझे थ्रेड हैंडलर 'अपडेटमीटर' में 'नई फैंसी वोल्ल्टमीटर()' रेखा डालने का विचार दिया। यूआई अब फ्रीज नहीं है, और यह बहुत दिलचस्प है। –