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 フレームワークのバグですか?