我试图在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。
答案 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);