- ベストアンサー
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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Formが表示されるのは Loadイベントを抜けた後になります Loadイベント中に Do ... Loop で無限ループを作っているので .NET Frameworkがフォームを表示することはありません フォームを表示するのであればループに入る前に Me.Show() などを実行しましょう 本来なら ボタンなどを準備してそのクリックイベントなどを使うようにしたほうがいいと思います
その他の回答 (1)
- K-Sogacchi
- ベストアンサー率53% (50/93)
既に答えは出ているようですが、補足を。 VB2005なら、FormのShownイベントで実際に表示する処理を書くって手も 使えますよ。 ちなみに.NETでも、2003までのバージョンにはShownイベントは無いようです。
お礼
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) :
お礼
redfox63様 早々のご回答ありがとうございます。 なるほど、そういうことですか....お恥ずかしい ということは、以下のような方法が考えられますでしょうか。 ・フォームのロードでやるならば、ループの前にme.show()を実行する ・ボタンなどをつけて、ボタンクリック後にループで受信する どちらも、これから確認してみます。 ありがとうございました。