您的位置:首页 > 其它

委托解决线程操作控件问题(简单聊天工具)

2009-04-15 21:06 295 查看
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Windows.Forms;

namespace Server
{
public partial class Server : Form
{
public Server()
{
InitializeComponent();
}

private TcpListener MyTcpListener = null;
private TcpClient MyTcpServer = null;
private NetworkStream MyNetStream = null;
private Thread MainThread = null;
private Thread MyThread = null;
private StreamWriter MyStreamWriter = null;
private StreamReader MyStreamReader = null;
delegate void SetTextCallBack(string Text);

private void btnConnect_Click(object sender, EventArgs e)
{
MainThread = new Thread(new ThreadStart(Listening));
MainThread.Start();
}

private void Listening()
{
MyTcpListener = new TcpListener(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));
MyTcpListener.Start();
MyTcpServer = MyTcpListener.AcceptTcpClient();
MyTcpListener.Stop();
MyNetStream = MyTcpServer.GetStream();
MyStreamReader = new StreamReader(MyNetStream, System.Text.Encoding.Default);
MyStreamWriter = new StreamWriter(MyNetStream, System.Text.Encoding.Default);
MyThread = new Thread(new ThreadStart(Reading));
MyThread.Start();
MessageBox.Show("连接服务器成功");
}

private void SetText(string Text)
{
if (richTextBox1.InvokeRequired) //如果是不同线程调用就返回True
{
SetTextCallBack setText = new SetTextCallBack(SetText);
this.Invoke(setText, Text); //这里调用下次进来richTextBox1.InvokeRequired就为False
}
else
{
richTextBox1.AppendText(Text);
}
}

private void Reading()
{
while (true)
{
for (int i = 0; i < 4; i++)
{
if (i == 1)
{
string youmsg = "/r/n" + MyStreamReader.ReadLine();
SetText(youmsg); //如果直接在这对richTextBox1操作会提示错误(不是由线程创建的控件)
}
else
{
string youmsg = "/r/n" + MyStreamReader.ReadLine();
SetText(youmsg);
}
}
}
}

private void btnSender_Click(object sender, EventArgs e)
{
string mymsg = DateTime.Now.ToString() + "<" + "来自服务器" + ">" + "/r/n" + richTextBox2.Text + "/r/n" + "/r/n";
MyStreamWriter.WriteLine(mymsg);
MyStreamWriter.Flush();
richTextBox2.Clear();
richTextBox1.AppendText(mymsg);
}
}
}

服务器代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐