C#中线程中设置另一个线程的控件属性

这是一个关于C#编程的博客,重点讨论如何在线程中安全地修改另一个线程所控制的UI元素属性。示例程序是一个TCP客户端应用,其线程交互可能涉及到跨线程UI更新的问题,但TCP部分的功能尚未经过验证,后续可能需要进一步完善和校验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

窗口中有两个控件,一个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;
namespace WindowsFormsApplication1
{
    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");
        }
        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);                              //内部调用
            }
        }
        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)
        {
            Thread t = new Thread(TcpServer);
            t.Start();
        }
    }
}


运行效果如下:程序为一个TCP客户端程序,TCP部分还未验证,有待核实更新。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值