• ベストアンサー

vb2005でUDP受信時にフォームが表示されない

はじめまして VB2005でUDPのメッセージを受信してForm上のLabelに受信内容を表示させるサンプルプログラムを作成したのですが、「デバック開始」をクリックしてもFormのウィンドウ自体が表示されません。 イミディエイトにdebug.printで受信データは表示されていますのでプログラム自体は正常に動作しているようです。 どなたかアドバイスをいただけませんでしょうか。 Public Class Form1 Dim localport As Integer = 1111 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8 ' バインド Dim udp As New System.Net.Sockets.UdpClient(localport) ' 受信 Dim remoteEP As System.Net.IPEndPoint = Nothing Debug.Print("受信開始") Do My.Application.DoEvents() Dim rcvBytes As Byte() = udp.Receive(remoteEP) Dim rcvMsg As String = enc.GetString(rcvBytes) My.Application.DoEvents() Debug.Print("受信メッセージ:" & rcvMsg) Label1.Text = rcvMsg Loop End Sub End Class

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Formが表示されるのは Loadイベントを抜けた後になります Loadイベント中に Do ... Loop で無限ループを作っているので .NET Frameworkがフォームを表示することはありません フォームを表示するのであればループに入る前に Me.Show() などを実行しましょう 本来なら ボタンなどを準備してそのクリックイベントなどを使うようにしたほうがいいと思います

koto-44
質問者

お礼

redfox63様 早々のご回答ありがとうございます。 なるほど、そういうことですか....お恥ずかしい ということは、以下のような方法が考えられますでしょうか。 ・フォームのロードでやるならば、ループの前にme.show()を実行する ・ボタンなどをつけて、ボタンクリック後にループで受信する どちらも、これから確認してみます。 ありがとうございました。

その他の回答 (1)

回答No.2

既に答えは出ているようですが、補足を。 VB2005なら、FormのShownイベントで実際に表示する処理を書くって手も 使えますよ。 ちなみに.NETでも、2003までのバージョンにはShownイベントは無いようです。

koto-44
質問者

お礼

K-Sogacchi様 ありがとうございます。 現在のところTimerコントロールで200msにイベントを発生させ、 受信データの有無をチェックするようにいたしました。 以下、ソースの抜粋です。 Public Class Form1  Dim listenport As Integer = 1111  Dim listner As New Sockets.UdpClient(listenport)  Dim EP As New IPEndPoint(IPAddress.Any, listenport)  Dim bytes As Byte()  Dim rcvmsg As String  Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick   If listner.Available > 0 Then    ' UDP受信データあり    bytes = listner.Receive(EP)    rcvmsg = Encoding.ASCII.GetString(bytes, 0, bytes.Length)    Debug.Print("受信メッセージ:" & rcvmsg)      :

関連するQ&A

専門家に質問してみよう