2

C# で書かれた Win8 メトロ アプリケーションに問題があります。WP7 デバイスからパケット (単純な 1 つの文字列コマンド) を受信する UDP リスナーがあります。

パケットがアプリに届いていることがわかりますが、受信できるのは数個だけです。出力ウィンドウでしばらく(5〜10秒)後、私は受け取ります

スレッド 0x5a4 はコード 0 (0x0) で終了しました。

スレッドが停止する理由がわかりません。これは非常に単純な私のソース コードです。リスナーをバインドし、イベント ハンドラーをセットアップしてから、コマンドを受け取ったら、UI で楕円形 (ユーザー) を移動するだけです。

コード :

private async void Button_Click_1(object sender, RoutedEventArgs e)
{
    DatagramSocket listener = new DatagramSocket();          
    listener.MessageReceived += listener_MessageReceived;            

    try
    {
        await listener.BindServiceNameAsync(serviceName.Text);            
    }
    catch (Exception exception)          
    {               
        if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown)
        {
            throw;
        }                
    }                
}

async void listener_MessageReceived(DatagramSocket socket, DatagramSocketMessageReceivedEventArgs eventArguments)
{
    try
    {
        uint stringLength = eventArguments.GetDataReader().UnconsumedBufferLength;
        string command = eventArguments.GetDataReader().ReadString(stringLength);

        await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                MessageBlock.Text = "Message : " + command + " (@ " + DateTime.Now;
                MakeMove(command); 
            }
        );            
    }
    catch (Exception exception)
    {
        SocketErrorStatus socketError = SocketError.GetStatus(exception.HResult);
        if (socketError == SocketErrorStatus.ConnectionResetByPeer)
        {                     
            Debug.WriteLine("Peer does not listen on the specific port. Please make sure that you run step 1 first " +
                        "or you have a server properly working on a remote server."); 
        }
        else if (socketError != SocketErrorStatus.Unknown)
        {
            Debug.WriteLine("Error happened when receiving a datagram: " + socketError.ToString());
        }
        else
        {
            throw;
        }
    }
}

private void MakeMove(string command)
{
    Debug.WriteLine(command);

    switch (command)
    {
        case "10":
            this.user.SetValue(Canvas.TopProperty, Convert.ToInt32(this.user.GetValue(Canvas.TopProperty)) - 50);
            break;
        case "20":
            this.user.SetValue(Canvas.LeftProperty, Convert.ToInt32(this.user.GetValue(Canvas.LeftProperty)) + 50);
            break;
        case "30":
            this.user.SetValue(Canvas.TopProperty, Convert.ToInt32(this.user.GetValue(Canvas.TopProperty)) + 50);
            break;
        case "40":
            this.user.SetValue(Canvas.LeftProperty, Convert.ToInt32(this.user.GetValue(Canvas.LeftProperty)) - 50);
            break;
        case "50":
            this.user.SetValue(Canvas.LeftProperty, Convert.ToInt32(this.user.GetValue(Canvas.LeftProperty)) + 50);
            this.user.SetValue(Canvas.TopProperty, Convert.ToInt32(this.user.GetValue(Canvas.TopProperty)) - 50);
            break;
        case "60":
            this.user.SetValue(Canvas.LeftProperty, Convert.ToInt32(this.user.GetValue(Canvas.LeftProperty)) - 50);
            this.user.SetValue(Canvas.TopProperty, Convert.ToInt32(this.user.GetValue(Canvas.TopProperty)) - 50);
            break;
        case "70":
            this.user.SetValue(Canvas.LeftProperty, Convert.ToInt32(this.user.GetValue(Canvas.LeftProperty)) + 50);
            this.user.SetValue(Canvas.TopProperty, Convert.ToInt32(this.user.GetValue(Canvas.TopProperty)) + 50);
            break;
        case "80":
            this.user.SetValue(Canvas.LeftProperty, Convert.ToInt32(this.user.GetValue(Canvas.LeftProperty)) - 50);
            this.user.SetValue(Canvas.TopProperty, Convert.ToInt32(this.user.GetValue(Canvas.TopProperty)) + 50);
            break;
        default:
            Debug.WriteLine("Unknown command");
            break;
    }

私が間違っていることは何ですか?

前もって感謝します!

4

0 に答える 0