アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして
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

A 回答 (2件)

Formが表示されるのは Loadイベントを抜けた後になります



Loadイベント中に Do ... Loop で無限ループを作っているので
.NET Frameworkがフォームを表示することはありません

フォームを表示するのであればループに入る前に Me.Show() などを実行しましょう

本来なら ボタンなどを準備してそのクリックイベントなどを使うようにしたほうがいいと思います
    • good
    • 0
この回答へのお礼

redfox63様
早々のご回答ありがとうございます。

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

どちらも、これから確認してみます。

ありがとうございました。

お礼日時:2008/06/15 23:43

既に答えは出ているようですが、補足を。


VB2005なら、FormのShownイベントで実際に表示する処理を書くって手も
使えますよ。
ちなみに.NETでも、2003までのバージョンにはShownイベントは無いようです。
    • good
    • 0
この回答へのお礼

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)
     :

お礼日時:2008/06/16 23:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!