2012-04-16 38 views
6

Tôi đang cố kết nối với quy mô kỹ thuật số USB, Mã kết nối với tỷ lệ là scale.IsConnected trở thành sự thật, nhưng bị treo trên scale.Read(250) trong đó 250 phải hết thời gian chờ bằng mili giây nhưng không bao giờ trở về từ đọc
USB HID treo trên Read() trong C#

tôi đang sử dụng mã từ this chủ đề ngoại trừ một sự thay đổi đó là do phiên bản mới của 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; 
    } 

tôi quản lý để có được quy mô làm việc, hãy nhìn vào câu trả lời của Mike here

Trả lời

4

tôi quản lý để có được làm việc quy mô, Trong callback của tôi mà chạy khi quy mô trả về dữ liệu tôi đang làm Read đó là một cuộc gọi chặn. Vì vậy, một bế tắc đã được tạo ra, chỉ nên sử dụng ReadReport hoặc Read hãy xem ví dụ của Mike bên dưới mà ông đã đăng 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

Hãy đánh dấu điều này là được chấp nhận khi hệ thống cho phép bạn :) –

+0

Lớp 'Data' ở đâu bạn tạo một thể hiện của nó trong phương thức OnReport? –

+0

Đây là tất cả mã tôi cần. được một thời gian mặc dù – PUG

2

tôi không thể giúp bạn với vấn đề của bạn, nhưng một thời gian trước, tôi đã phải tích hợp một công tắc chân vào một ứng dụng và tôi thấy USB này HID C thư viện # mà làm việc một cách hoàn hảo:

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

Có thể bạn nên thử vì nó rất đơn giản để tích hợp.

David

Các vấn đề liên quan