Сбой библиотеки HID UWP - PullRequest
       7

Сбой библиотеки HID UWP

0 голосов
/ 09 октября 2018

Я разрабатываю приложение UWP для работы с устройствами HID.Приложение работает корректно почти все время.Но это часто вылетает, когда я закрываюсь или сворачиваюсь / восстанавливаюПолучено исключение Место чтения нарушения прав доступа:

Exception thrown at 0x5FC8A31C (Windows.Devices.HumanInterfaceDevice.dll) in MyApp.exe: 0xC0000005: Access violation reading location 0x0000001E.

И это исключение всегда появляется в методе CreateOutputReport.

Как проверить возможность создания выходного отчета?Или как я могу обработать это исключение в UWP?

Спасибо за любой совет заранее.

UPD: Вот пример кода

HidDevice device = await HidDevice.FromIdAsync(id, FileAccessMode.ReadWrite);
if(device != null)
{
    var outReport = device.CreateOutputReport(); // Crashes here only on collapsing/closing
    byte[] buffer = new byte[(int)outReport.Data.Capacity];
    outReport.Data = buffer.AsBuffer();
    await device.SendOutputReportAsync(outReport);
}

UPD 2: протестировано сцарапина.Создано приложение UWP с этим кодом:

public async void StartSending()
{
    var devices = await DeviceInformation.FindAllAsync(HidDevice.GetDeviceSelector(usagePage, usageId, vid, pid));

    if (devices.Any())
    {
        var device = devices.FirstOrDefault();

        HidDevice hidDevice = await HidDevice.FromIdAsync(device.Id, FileAccessMode.ReadWrite);

        if (hidDevice != null)
        {
            while(true)
            {
                var outReport = hidDevice.CreateOutputReport();

                byte[] buffer = new byte[(int)outReport.Data.Capacity];

                // fill data

                outReport.Data = buffer.AsBuffer();
                await hidDevice.SendOutputReportAsync(outReport);

                await Task.Delay(500);
            }
        }
    }
}

Все прекрасно работает, пока я не сверну приложение.Приложение не удалось после восстановления.Но это появляется только в установленном приложении.Работает корректно с VS.

Видео

1 Ответ

0 голосов
/ 19 октября 2018

Спасибо за все ответы.@ XavierXie-MSFT был прав, у меня нет логики для приостановки / возобновления.Это работает сейчас.

Вот код:

Application.Current.Suspending += OnSuspending;
Application.Current.Resuming += OnResuming;

private void OnResuming(object sender, object e)
{
    // Reinitialize all watchers for HID
    // Subscribe to all necessary events
}

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    // Remove all watchers for HID
    // Unsubscribe from all events
    // Dispose all active HID devices
}
...