开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 35634|回复: 15
收起左侧

[C#图文教程] c# 多线程修改TextBox 内容

[复制链接]
发表于 2019-3-28 11:53:57 | 显示全部楼层 |阅读模式   广东省揭阳市
本帖最后由 赵六 于 2019-3-28 18:07 编辑

第一种方法 不建议使用 偷懒用的
在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 false
代码如下
  
public partial class Form1 : Form
{
Action SetTextValue;
public Form1 ()
{
InitializeComponent ();
CheckForIllegalCrossThreadCalls = false;
SetTextValue = Text_Update;
}

private void button1_Click (object sender, EventArgs e)
{
Thread th = new Thread (new ThreadStart (Text_Update));
th.Start ();
}
public void Text_Update ()
{
for (int i = 0; i < 100; i++)
{
textBox1.Text = i.ToString ();
Thread.Sleep (200);
}


}
private void Form1_Load (object sender, EventArgs e)
{
}
}

第二种方法 推荐
public partial class form : Form
    {
        public form()
        {
            InitializeComponent();
        }


      
        private void button1_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(new ThreadStart(Por));

            th.IsBackground = true;

            th.Start();


        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }


        private void Por()
        {
         

                for (int i = 0; i < 10000000; i++)
                {
                    if (textBox1.InvokeRequired)
                    {
                        textBox1.Invoke(new Action<TextBox, string>(SetTextValue), textBox1, i.ToString());
                    }
                    else
                    {
                        textBox1.Text = i.ToString();
                    }


                }
            

        }


        private void SetTextValue(TextBox text, string msg)
        {
            text.Text = msg;
        }

        private void form_Load(object sender, EventArgs e)
        {

        }
    }


TextBox_多线程修改.zip

328.28 KB, 下载次数: 12, 下载积分: 精币 -2 枚

发表于 2022-1-14 21:49:24 | 显示全部楼层   江西省赣州市
用得着这么麻烦   this.invoke(new Action(()=>{textBox1.Text="内容";}));不就行了
回复 支持 反对

使用道具 举报

发表于 2021-3-23 09:55:59 | 显示全部楼层   安徽省安庆市
委托,多线程
回复 支持 反对

使用道具 举报

发表于 2020-12-2 12:21:44 | 显示全部楼层   湖北省宜昌市
退出后,有异常。。。
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2019-4-23 22:12:45 | 显示全部楼层   江苏省南通市
赵六 发表于 2019-4-17 20:37
修改内容都是UI线程 你多线程操作其它 的 不影响啊

有没有多线程的例子 不是线程池的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-17 20:37:02 | 显示全部楼层   广东省揭阳市
夜鬼 发表于 2019-4-17 18:20
大佬 没看到是多线程  只看到是用委托 启动一个线程啊

修改内容都是UI线程 你多线程操作其它 的 不影响啊
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2019-4-17 18:20:26 | 显示全部楼层   美国
大佬 没看到是多线程  只看到是用委托 启动一个线程啊  
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2019-4-10 17:38:51 | 显示全部楼层   贵州省遵义市
好厉害呀
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)
发表于 2019-3-28 16:15:01 | 显示全部楼层   新加坡
赵六 发表于 2019-3-28 15:56
这只是单线程啊 你循环里修改资料试试

不扯了  代码又莫名其妙的变单线程了  你写到你IDE里面 下断点调试看看 几个线程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-28 15:56:51 | 显示全部楼层   广东省揭阳市

这只是单线程啊 你循环里修改资料试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表