public string receivedata
{
get { return _receiveData; }
set {
_receiveData = value;
更新界面
}
} _receiveData = "信息:" + iep.Address.ToString() + ":" + iep.Port.ToString() + "->" +
Encoding.GetEncoding(0).GetString(clientbyte);
->
receiveData = "信息:" + iep.Address.ToString() + ":" + iep.Port.ToString() + "->" +
Encoding.GetEncoding(0).GetString(clientbyte);
{
get { return _receiveData; }
set {
_receiveData = value;
更新界面
}
} _receiveData = "信息:" + iep.Address.ToString() + ":" + iep.Port.ToString() + "->" +
Encoding.GetEncoding(0).GetString(clientbyte);
->
receiveData = "信息:" + iep.Address.ToString() + ":" + iep.Port.ToString() + "->" +
Encoding.GetEncoding(0).GetString(clientbyte);
private void button5_Click(object sender, EventArgs e)//单击开始监听
{
Thread newthread = new Thread(listing);
newthread.Start();
}
private SocketNet.NetPortOperate npo;
private void listing()
{
npo = new SocketNet.NetPortOperate();
npo.IpAddress = IPAddress.Parse("192.168.1.233");
npo.netPort = 55501;
npo.OnReceiveDate();
this.richTextBox4.AppendText(npo.receivedata);//要显示收到信息的控件RICHTEXTBOX4
}
发送信息后无法显示在此控件中,通过另一个BUTTON单击查看npo.receivedata的值是有变化的。有什么好的解决办法?
另外在线程中不要直接访问UI控件,通过委托invoke
能否给实例代码看看。
谢谢!!
{
private static Socket _client = null;
//初始化client
...//委托
public delegate void ParseData(string data);
//事件
public static event ParseData OnRecevieData;
....//开始接收数据
public static void StartReceiveCommand()
{
Thread thread = new Thread(new ThreadStart(() =>
{
while (true)
{
byte[] buffer = new byte[1024];
int count = _client.Receive(buffer, 0, buffer.Length, 0);
string data = Encoding.ASCII.GetString(buffer, 0, count);
ParseServerCommand(data);
}
}));
thread.IsBackground = true;
thread.Start();
}//解析数据
private static void ParseServerCommand(string data)
{//触发事件
if (OnRecevieData != null)
{
OnRecevieData(data);
}
}
}Form里面的代码
private void Form_Load(object sender, EventArgs e)
{
//绑定事件
SocketClient.OnRecevieData += ParseCommand;
SocketClient.StartReceiveCommand();
}
private void ParseCommand(string data)
{
//比如要显示数据到lableOutput上
if (lableOutput.InvokeRequired)
{
SetText s = (t) =>
{
lableOutput.Text = t;
};
lableOutput.Invoke(s, new object[] { text });
}
else
{
lableOutput.Text = text;
}
}public delegate void SetText(string text);