窗口中有两个控件,一个richTextBox名字为rtxt_main,另外一个为一个按钮(Button)名字为button01,程序启动后点击按钮将启动一个线程,在线程中使用委托技术更新richTextBox的文字,关键代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public int port = 8192;
public Form1()
{
InitializeComponent();
}
public delegate void delegateHandler(String str); //定义一个委托
{
public partial class Form1 : Form
{
public int port = 8192;
public Form1()
{
InitializeComponent();
}
public delegate void delegateHandler(String str); //定义一个委托
private void Form1_Load(object sender, EventArgs e)
{
this.rtxt_main.AppendText("Server is start...\n");
}
{
this.rtxt_main.AppendText("Server is start...\n");
}
private void setShow(String strTemp) {
if (this.InvokeRequired)
{
delegateHandler delegateSetText = new delegateHandler(setShow); //声明回调函数对象
this.Invoke(delegateSetText, new object[] { strTemp }); //调用自己
}
else {
this.rtxt_main.AppendText(strTemp); //内部调用
}
}
if (this.InvokeRequired)
{
delegateHandler delegateSetText = new delegateHandler(setShow); //声明回调函数对象
this.Invoke(delegateSetText, new object[] { strTemp }); //调用自己
}
else {
this.rtxt_main.AppendText(strTemp); //内部调用
}
}
private void TcpServer() {
TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();
setShow("Server running...\n");
while (true)
{
const int bufferSize = 8155;
TcpClient client = listener.AcceptTcpClient();
NetworkStream clientStream = client.GetStream();
byte[] buffer = new byte[bufferSize];
int readcount = 0;
readcount = clientStream.Read(buffer, 0, bufferSize);
String result = Encoding.UTF8.GetString(buffer).Substring(0, readcount);
setShow(result);
clientStream.Close();
}
}
private void button1_Click(object sender, EventArgs e)TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();
setShow("Server running...\n");
while (true)
{
const int bufferSize = 8155;
TcpClient client = listener.AcceptTcpClient();
NetworkStream clientStream = client.GetStream();
byte[] buffer = new byte[bufferSize];
int readcount = 0;
readcount = clientStream.Read(buffer, 0, bufferSize);
String result = Encoding.UTF8.GetString(buffer).Substring(0, readcount);
setShow(result);
clientStream.Close();
}
}
{
Thread t = new Thread(TcpServer);
t.Start();
}
}
}
运行效果如下:程序为一个TCP客户端程序,TCP部分还未验证,有待核实更新。。。
这是一个关于C#编程的博客,重点讨论如何在线程中安全地修改另一个线程所控制的UI元素属性。示例程序是一个TCP客户端应用,其线程交互可能涉及到跨线程UI更新的问题,但TCP部分的功能尚未经过验证,后续可能需要进一步完善和校验。
914

被折叠的 条评论
为什么被折叠?



