我正在尝试使用VS Community 2015在c#中编写一个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");
}
}在调试模式下,我在连接器的msg变量中看到websocket返回的消息,但我将其返回给MainActivity的方式不起作用。它保持为空。
发布于 2016-02-29 23:12:33
你刚连接到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);https://stackoverflow.com/questions/35702883
复制相似问题