2

Windows 8.1 の Windows.Devices.USB API を使用してカスタム USB デバイスに接続し、通信する Windows ストア アプリ用の USB デバイス API を作成しています。Visual Studio 2013 開発プレビュー IDE を使用しています。ライブラリの次の関数を使用して、USB デバイスに接続します。(わかりやすくするために簡略化しています)

public static async Task<string> ConnectUSB()
    {
        string deviceId = string.Empty;
        string result = UsbDevice.GetDeviceSelector(new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"));
        var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(result, null);
        if (myDevices.Count > 0)
        {
            deviceId = myDevices[0].Id;
        }
        UsbDevice usbDevice = null;
        try
        {
            usbDevice = await UsbDevice.FromIdAsync(deviceId);
        }
        catch (Exception)
        {
            throw;
        }
        if (usbDevice != null)
            return "Connected";
        return string.Empty;
    }

Windows ストア アプリ プロジェクトから呼び出されると、この関数は問題なくデバイスに接続します。ただし、Windows ストア アプリ プロジェクトの単体テスト ライブラリから呼び出すと、try ブロック内のステートメントで例外がスローされます。

A method was called at an unexpected time. (Exception from HRESULT: 0x8000000E)

私が調べたところ、これは await キーワードなしで Async 関数が呼び出されたときに発生します。しかし、私は await キーワードを使用しています。

いくつかの詳細情報、NUnit を使用してストア アプリの単体テストを作成できないため、MSTest フレームワークを使用しています。

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public async Task TestMethod1()
    {
        await ConnectToUSB.ConnectUSB();
    }
}

また、両方のアプリ ストア プロジェクトのマニフェスト ファイルにも次の機能タグを含めました。これがないと、ストア アプリがデバイスに接続することはできません。

<m2:DeviceCapability Name="usb">      
  <m2:Device Id="vidpid:ZZZZ XXXX">
    <m2:Function Type="name:vendorSpecific" />
  </m2:Device>
</m2:DeviceCapability>

不足しているものはありますか、それとも MSTest フレームワークのバグですか?

4

2 に答える 2