使用c#启动帮助第一个Android应用

时间:2016-02-29 15:07:29

标签: c# android websocket

我试图在c#中使用VS Community 2015编写一个Android应用程序 应用程序应该向websocket发送一条消息,它会收到答复的显示。

这是我的MainActivity.cs

public class MainActivity : Activity
{


    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        // Get our button from the layout resource,
        // and attach an event to it
        Button button = FindViewById<Button>(Resource.Id.MyButton);
        TextView t1 = FindViewById<TextView>(Resource.Id.textView1);

        button.Click += delegate
        {
            string msg = SetStatusText();
            t1.SetText(msg,TextView.BufferType.Normal);
        };

    }

    private string SetStatusText()
    {
        Connector c = new Connector();
        c.Connect();
        return c.msg;

    }
}

连接器就像这样

class Connector
{
    public string msg { get; set; }

    WebSocket websocket = new WebSocket("ws://192.168.1.103:2012/");
    public void Connect()
    {
        websocket.Opened += new EventHandler(websocket_Opened);
        websocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(websocket_MessageReceived);
        websocket.Open();
    }

    private void websocket_MessageReceived(object sender, MessageReceivedEventArgs e)
    {
        msg = e.Message;
    }

    private void websocket_Opened(object sender, EventArgs e)
    {
        websocket.Send("Status");
    }   


}

在调试模式下,我看到websocket在连接器的msg变量中返回的消息,但是我将它返回到MainActivity的方式并不起作用。它保持为NULL。

1 个答案:

答案 0 :(得分:0)

您在连接到WebSocket后使用“msg”变量,因为您仍然没有收到消息而失败,您需要以某种方式等待websocket_MessageReceived被执行。

如果您想等到收到消息,可以使用以下事件:

class Connector
{
    public string msg { get; set; }
    public event EventHandler MessageReceived;

    WebSocket websocket = new WebSocket("ws://192.168.1.103:2012/");
    public void Connect()
    {
        websocket.Opened += new EventHandler(websocket_Opened);
        websocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(websocket_MessageReceived);
        websocket.Open();
    }

    private void websocket_MessageReceived(object sender, MessageReceivedEventArgs e)
    {
        msg = e.Message;
        if(MessageReceived != null)
            MessageReceived(this, EventArgs.Empty);
    }

    private void websocket_Opened(object sender, EventArgs e)
    {
        websocket.Send("Status");
    }   
}

然后,当您创建连接时,您可以执行以下操作:

c.MessageReceived += (o,e) => t1.SetText(c.msg,TextView.BufferType.Normal);