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入門
コメント