2017-01-16 5 views
0

私はフォーム上に2つのボタンを持っています。 1つはsocketクラスのオブジェクトを作成してエンドポイントを受信開始するためのもので、もう1つは受信を停止するためのものです。私は最初のコードを書いたが、ソケットのオブジェクトへのリンクを2番目にどのようにして閉じるかを知らない。 最初のボタンのための私のコードは:ソケットオブジェクトへのリンクを送信するには?

public void Listen() 
{ 
IPEndPoint point = new IPEndPoint(IPAddress.Parse(textBoxIPListen.Text), Convert.ToInt32(textBoxPortListen.Text)); 
UdpClient receiver = new UdpClient(point); 
    try 
    { 
     while (true) 
     { 
     byte[] data = receiver.Receive(ref point); 
        string message = Encoding.Unicode.GetString(data); 
     RecieveMessage(message); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

私は、ボタンのタグによって、それを設定しようとしましたが、それは働いていません。

答えて

1

whileループがメインスレッドをブロックしています。リスンするためのスレッドを作成するか、非同期メソッドを使用する必要があります。

は、例えばここを見て:

UdpClient.BeginReceive Method (AsyncCallback, Object)

How to send link to the socket object?。 UdpClientを格納するフィールドを作成する必要があります。

public class Form1 
{ 
    private UdpClient _receiver; 

    public void ButtonStart_Click(object sender, EventArgs e) 
    { 
     // create the socket etc, 
     _receiver = new UdpClient(point); 
    } 

    public void ButtonStop_Click(object sender, EventArgs e) 
    { 
     // stop the socket. 
     _receiver.Dispose(); 
    } 
} 
関連する問題