7

USBデジタルスケールに接続しようとしています。コードは true になるとスケールに接続しますが、250 がミリ秒単位のタイムアウトであるはずの場所scale.IsConnectedでハングしますが、Read から戻ることはありません。scale.Read(250)

Mike O Brien の HID ライブラリの新しいバージョンによる 1 つの変更を除いて、このスレッドのコードを使用しています。

public HidDevice[] GetDevices ()
{
    HidDevice[] hidDeviceList;
            
    // Metler Toledo
    hidDeviceList = HidDevices.Enumerate(0x0eb8).ToArray();
    if (hidDeviceList.Length > 0)
        return hidDeviceList;
    
    return hidDeviceList;
}

なんとかスケールを機能させることができました。ここでマイクの答えを見てください

4

2 に答える 2

4

なんとかスケールを動かすことができました。scaleがデータを返すときに実行されるコールバックReadでは、ブロッキング呼び出しを実行していました。

そのため、デッドロックが発生しました。ReadReportまたはを使用する必要がありReadました。以下に彼がここに投稿したマイクの例を見てください。

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.");
        }
    }
}
于 2012-10-18T15:22:29.700 に答える
2

あなたの問題を解決することはできませんが、少し前にフットスイッチをアプリケーションに統合する必要があり、完全に機能する次の USB HID C# ライブラリを見つけました。

C# 用の USB HID コンポーネント

統合するのは非常に簡単なので、試してみてください。

于 2012-04-27T13:13:19.863 に答える