日期:2014-05-18  浏览次数:20849 次

关于委托更新界面的问题
在window mobile里面的一个小东西。
定义一个委托:
public delegate void ResponseEvent(string ip, byte[] responseBytes);
窗体界面中的代码:
...
private void Form1_Load(object sender, EventArgs e)
  {
  tcpClient = new TcpClient();
  tcpClient.OnResponse += new ResponseEvent(OnResponse);
  }
private void OnResponse(string sIp, byte[] responseBytes)
  {
  string sRet = "";
  for (int i = 0; i < responseBytes.Length; i++)
  {
  sRet += responseBytes[i].ToString() + " ";
  }
  MessageBox.Show(sRet);
  //txtRecv.Text = sRet;
  }
...
通讯类中的部分代码:
private void ReceiveCallback(IAsyncResult ar)
{
  ...
  OnResponse(ip, btRecv);
  ...
}

要实现的功能就是通过socket受到消息之后,在界面中的textbox中显示出来。但是现在遇到这样一个问题,用MessageBox可以显示出来,但是不能赋给textbox(操作别的控件也不可以,如listview)。还请各位指点一下

------解决方案--------------------
使用invoke,实质上这属于跨线程调用,因为界面中的textbox位于UI线程内。
------解决方案--------------------
一种是用INVOKE
要么收到信息就放QUEUE里
然后TIMER定时检查有没有信息