关于委托更新界面的问题
在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定时检查有没有信息