При использовании UWP MIDI API с физическим MIDI-устройством приложение зависает при выходе и не может быть принудительно завершено ни из командной строки, ни из диспетчера задач.
Это происходит для всех приложений UWP, которые используют MIDIвключая официальный пример из MSDN , без изменений.
Я поднял проблему на GitHub по этому поводу, но, похоже, это не новая проблема.MIDI предположительно не работает с 2014 года.
Есть ли способ обойти эту проблему в UWP другими способами?Я пишу на C #, но свободно владею C ++ и могу использовать API более низкого уровня, если они существуют.Мне нужно только получить MIDI-вход от выбранного MIDI-устройства (клавиатуры).
Я также пытался использовать winmm.dll
, как предложено в соответствующем посте ( Получение сигналов от порта MIDI в C # ), но это не работает для меня.Метод midiInGetNumDevs()
возвращает 0 при использовании из приложения UWP.
Я использую звуковую карту M-Audio Fast Track USB (подключена через USB) и M-AudioКлавиатура 88es Keystation MIDI (подключается через USB).У меня не было проблем в настольных приложениях.
Я обнаружил частичный обходной путь, когда я перемещаю код освобождения в обработчик событий App Suspending
вместо того, чтобы помещать его в деструктор.Тем не менее, проблема все еще возникает, когда устройство отключено во время жизни приложения.Если MIDI-устройство подключено во время работы приложения, приложение закрывается без проблем (с обходным решением).Если MIDI-устройство подключено до запуска приложения и остается подключенным во время работы приложения, приложение закрывается без проблем (с обходным решением).Только если устройство отключено во время работы приложения, оно будет зависать при закрытии независимо от того, выполняется ли код освобождения в деструкторе или в обработчике App Suspending
.