DatagramSocketの受信結果でUIの更新2015年02月09日 14:37

DatagramSocketの送受信を行うクラスを作成し、受信結果を基にUIを更新する処理を実装中。

結果の受信は、受信イベントからキックされるイベントハンドラーで行うため、UIとは別スレッドでの処理になる。そのため、ハンドラー内で受信結果を基にUIを更新しようとすると、0x8001010E RPC_E_WRONG_THREADの例外「このアプリケーションは、別のスレッドにマーシャリングされたインターフェイスを呼び出しました」が発生。

DatagramSocketの受信結果を用いてUIを更新

調べてみると、CoreDispatchre.RunAsyncを用いて、UI側のスレッドで実行するUI更新処理を呼び出す(制御を移す)ことで対処するという。参考にしたサンプルにも該当する処理の記述があったが見落としていた。サンプルに説明はないけど。

※NotifyUserFromAsyncThreadの処理。

※CoreDispatcherまでくると、さすがに日本語のコンテンツが目に見えて減ってくる。

悩ましいのは、せっかく、UIとDatagramSocketのクラスを分けたのに、後者からUIのクラス内の処理を呼び出すこと。再利用を考えると、独立させておきたい。そこで、受信が完了し、パケットの解析も終了したことを知らせる自前のイベントを実装。イベントの多段渡しと、ちょっとまどろっこしくなってしまった。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2015/02/09/7568553/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。