2012-04-12 3 views
2

Ich verwende Mike O Brien's HID Library für die Verbindung zur digitalen Waage, Gerät wird erfolgreich gestartet und zeigt das angeschlossene Gerät an & entfernte Nachrichten einwandfrei. Aber läuft nur OnReport für etwa 20 mal zunächst
Nach Inital ca. 20 läuft auf OnReport es läuft nie wieder, es sei denn, ich entfernen USB-Kabel und erneut verbinden.Anschluss an Digitalwaage (Metler Toledo PS90) als HID läuft OnReport nur, wenn das Kabel zum ersten Mal an den Computer angeschlossen ist

Mein Code ist unten

if (scale.IsConnected) 
     { 
      scale.Inserted += DeviceAttachedHandler; 
      scale.Removed += DeviceRemovedHandler; 
      scale.MonitorDeviceEvents = true; 
      scale.ReadReport(OnReport); 
MessageBox.Show("Hold Application Here"); 

Event-Handler für die Skala

private void DeviceAttachedHandler() 
    { 
     MessageBox.Show("Device attached."); 
     scale.ReadReport(OnReport); 
    } 

    private static void DeviceRemovedHandler() 
    { 
     MessageBox.Show("Device removed."); 
    } 
    private void OnReport(HidReport report) 
    { 
     if (!scale.IsConnected) { return; } 


     //var cardData = new Data(report.Data); 
     decimal weight = Convert.ToDecimal(report.Data[4]);// (Convert.ToDecimal(report.Data[4]) + 



     MessageBox.Show(weight.ToString()); 
//Convert.ToDecimal(report.Data[5]) * 256)/100; 
      //Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage); 
      //Console.WriteLine(report.Data); 
     scale.ReadReport(OnReport); 
    } 

Antwort

1

ich es geschafft, die Skala zum Laufen zu bringen, die in meinem Rückruf läuft, wenn Skala liefert Daten, die ich Read tat das ist ein blockierender Anruf. So ein Deadlock wurde erstellt, sollte nur verwendet haben ReadReport oder Read werfen Sie einen Blick auf Mike Beispiel, unter dem er here veröffentlicht.

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."); 
     } 
    } 
} 
Verwandte Themen