UWP:PCと電話でDatagramSocketの挙動が異なる ― 2015年08月14日 13:25
ユニバーサルWindowsアプリ、Mobileエミュレータでテストを始めると、Datagram SocketのConnectAsyncの2回目からエラーが出る。

ブロッキング操作が実行中?
Windows Socketのエラー一覧を見ると、WSAEINPROGRESSのエラー。エラー対処では、時間をおいて再試行、とあるが、ずいぶん待っても解消しない。PCでのテスト実行では問題なかったところ。
※Windows Socketのエラー一覧:10036番
試行錯誤してみたところ、Mobileでは、Datagram Socketの使い回しを止めて、毎回、再作成するようにすると回避できる。
ほめられたコーディングではないが、Windows.System.ProfileのAnalyticsInfoから、デバイスの識別情報を取って、条件分岐。
PC:コンストラクタでDatagram Socketを用意して、使い回し
Mobile:コンストラクタではDatagram Socketを用意せず、時刻更新ボタン押下の度、都度作成
UWPとはいっても、若干の挙動の違いは残る様子。これからもいろいろ悩まされそう。
UWP:Mobile画面のepx(有効ピクセル数) ― 2015年08月14日 14:26
UWPでは、レスポンシブデザインということで、様々な大きさの画面を考慮して設計せよ、とあるが、一筋縄ではいかない。
VisualStudio 2015のMobileエミュレータは、5種。画面の大きさでいうと、WVGA、WXGA、720p、1080pの4種。4~6インチの画面をサポート。それぞれで縦と横、動作確認を行うが、なかなか思い通りにならない。2つのListViewの縦横の並び、広い用と狭い用のTemplateの選択、など。
しびれを切らして、PageのSizeChangedイベントで、縦横の有効ピクセル数をデバッグ出力させてみる。整数値でないものもある。(小数点2位四捨五入)
WVGA:533.3 x 320
WXGA:568.9 x 341.3
720p:640 x 360
1080p:768 x 432
デスクトップの最小:500 x 320
WXGA:568.9 x 341.3
720p:640 x 360
1080p:768 x 432
デスクトップの最小:500 x 320
エミュレータの見た目は変わらないが、結構幅がある。Mobileは1種類と考えてはいけない。
ListViewの大きさとこれら有効ピクセル数を考慮し、VisualStateを必要なだけ、StateTriggersで画面の縦横のサイズごとに切り替わるように設定。上図は、WVGAの縦と横の設定例。TargetのPropertyのうち、Grid.Rowなどは、()で囲んで指定する。上段のGridは2行1列、下段は1行2列。
最近のコメント