2012-04-16 7 views
6

में रीड() पर लटकता है, मैं एक यूएसबी डिजिटल स्केल से कनेक्ट करने की कोशिश कर रहा हूं, कोड scale.IsConnected के रूप में स्केल से कनेक्ट होता है, लेकिन scale.Read(250) पर लटका है जहां 250 मिलीसेकंड में टाइमआउट होना चाहिए लेकिन यह कभी नहीं एक परिवर्तन किया है जो Mike O Brien's HID Libraryयूएसबी छिपा सी #

public HidDevice[] GetDevices() 
    { 
     HidDevice[] hidDeviceList; 


     // Metler Toledo 
     hidDeviceList = HidDevices.Enumerate(0x0eb8).ToArray(); 
     if (hidDeviceList.Length > 0) 
    return hidDeviceList; 

     return hidDeviceList; 
    } 

के नए संस्करण की वजह से था सिवाय पढ़ें
से लौटने

this धागे से मैं कोड का उपयोग कर रहा मैं पैमाने पाने में कामयाब रहे काम कर रहे, माइक के जवाब पर एक नज़र डालें here

उत्तर

4

मैं, पैमाने काम कर पाने के लिए मेरी कॉलबैक जो तब चलता है जब पैमाने डेटा मैं Read कर रहा था जो एक अवरुद्ध कॉल है रिटर्न में कामयाब रहे। तो एक डेडलॉक बनाया गया था, केवल ReadReport या Read का उपयोग किया जाना चाहिए नीचे माइक के उदाहरण पर एक नज़र डालें, जिसे उन्होंने here पोस्ट किया था।

using System; 
using System.Linq; 
using System.Text; 
using HidLibrary; 

namespace MagtekCardReader 
{ 
    class Program 
    { 
     private const int VendorId = 0x0801; 
     private const int ProductId = 0x0002; 

     private static HidDevice _device; 

     static void Main() 
     { 
      _device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault(); 

      if (_device != null) 
      { 
       _device.OpenDevice(); 

       _device.Inserted += DeviceAttachedHandler; 
       _device.Removed += DeviceRemovedHandler; 

       _device.MonitorDeviceEvents = true; 

       _device.ReadReport(OnReport); 

       Console.WriteLine("Reader found, press any key to exit."); 
       Console.ReadKey(); 

       _device.CloseDevice(); 
      } 
      else 
      { 
       Console.WriteLine("Could not find reader."); 
       Console.ReadKey(); 
      } 
     } 

     private static void OnReport(HidReport report) 
     { 
      if (!_device.IsConnected) { return; } 

      var cardData = new Data(report.Data); 

      Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage); 

      _device.ReadReport(OnReport); 
     } 

     private static void DeviceAttachedHandler() 
     { 
      Console.WriteLine("Device attached."); 
      _device.ReadReport(OnReport); 
     } 

     private static void DeviceRemovedHandler() 
     { 
      Console.WriteLine("Device removed."); 
     } 
    } 
} 
+1

के रूप में स्वीकार चिह्नित करने के लिए स्वतंत्र महसूस एक बार सिस्टम आपको :) की सुविधा देता है –

+0

है कहाँ 'डेटा' वर्ग जहां विधि OnReport अंदर का एक उदाहरण बनाने के? –

+0

यह सब कोड है जो मुझे विश्वास है। हालांकि थोड़ी देर हो चुकी है – PUG

2

मैं अपनी समस्या के साथ मदद कर सकता है नहीं, लेकिन कुछ समय पहले मैं एक आवेदन पत्र में एक पैर स्विच एकीकृत करने के लिए किया था और मैंने पाया इस USB HID सी # पुस्तकालय है कि पूरी तरह से काम किया:

http://www.codeproject.com/Articles/18099/A-USB-HID-Component-for-C

शायद आपको इसे आज़माएं क्योंकि यह एकीकृत करना बहुत आसान है।

डेविड

संबंधित मुद्दे