Windowsの延長実行 ExtendedExecutionSession

 UWPのプログラミングの話。UWPのプログラムでは、ウィンドウを最小化したら処理が止まるなあ、と思っていた。2年ほど前にWindowsプログラミングをふとした思い付きで始めた時の話だ。とりあえず、考えていたやつができたので、それ以上のことは気にしないことにしていた。
 そんな、あまりにも今さらな話題ですみませんな話。Windowsプログラミングを知ってる人には、当たり前すぎてくだらない話かもしれませんが。
 C#プログラミングでUWP(雑に言うとWindows 10専用、ストアでリリースできるプログラム)。最小化で止まる。でもって、つい最近。気になって調べてみたら、それを解決する方法があるらしい。最初にやったのはバックグラウンドタスクというやつ。Creators Updateから簡単になったというので試したのだけどうまくいかず。がっかりな結果に。いまだにC#の基本がわかってないので、説明を見てもほぼ理解できず。サンプルのコードを、現在動いているアプリにつっこんでも、思ったようには動かず。
 次に、Template 10というのを使えばいいという情報を見つける。ライブラリというかテンプレートを使えば、何も考えずに、最小化しても動作を続けるという。そんなうまい話があるのか! と感動して、なんとか突っ込む。サンプルのコードをcsファイルに入れ込む。それだけではだめで、xamlもいじらないといけなかった。なんとかエラーを出すことなくビルドでき、プログラムは動く。しかし、最小化すると動作は止まっている模様。残念。
 それから、そのTemplate 10が使っているのはExtendedExecutionSessionというUWPの機能だということを理解。それまでにも何度もドキュメントを読んでいたのだけど、Template 10をちょっと触った後だと理解が進んだのか、うまいこと時間もかからず既存のプログラムの改変が完了。コンパイルして実行。
 サンプルはタイマーをトーストでトリガーするというもので、確かに10秒ごとにトーストが出る。
 しかし、自作のプログラムは思った通りに動かない。
 そのプログラムはMIDIberry。任意のMIDIポートから別のMIDIポートへデータをスルーするブリッジ的なアプリだ。Bluetooth MIDIデバイスをWindowsで使えるするようにするもの。Windows内蔵のMicrosoft GS Wavetable Synthを鳴らすこともできる。
 それが鳴らない。
 BLE-MIDIアダプタを付けたMIDIキーボードをつなぐと、GS Wavetable Synthで音が鳴る。最小化すると、音が止まる。
 プログラミングのミスか。理解が足りないのか。いろいろ考えた。
 そこで気づいた。


 ほかのデバイスに出力したらどうなのか? iPod touchをrtpMIDI経由でつないでみる。rtpMIDIネットワークでMIDIをやりとりできるアプリだ。
 その結果。普通に鳴る!
 最小化してもちゃんと動作してる。思った通りの動作だ。
 つまり、動作が止まっていたのは、GS Wavetable Synthだけだったのだ。MIDIberry自体は動作していたのだ。
 がーん。
 じゃあ、その前の段階でも実はMIDIberry自体は最小化しても動いてたのじゃないか。と思って、その時点でのコードをもう一度コンパイルして実行。GS Wavetable Synthじゃなければ、同じように動いてた。むー。時間返せ。
 ということで、なんとか形になった。
 マイクロソフトのドキュメントはここにある。
 延長実行を使ってアプリの中断を延期する – UWP app developer | Microsoft Docs

 わかる人はこれだけですぐわかるんだろう。
 10回くらい読んでやっと自分のプログラムに入れることができた。
 やっぱりC#の基本をちゃんと勉強しなきゃならないと、改めて思った2018年3月。
 Windowsプログラミングについて調べると、ほんと昔の話から知らないと理解できないようなことばかりで、かなりハードルが高く感じる。今から始める若者はどうしてるんだろう、と思わないでもないです。
 この本でも買ってみようかと思う。
かずきのUWP入門かずきのUWP入門

コメント