首页 新闻 会员 周边

多线程中频繁操作控件,导致界面卡,怎么办

0
[已解决问题] 解决于 2013-10-22 23:02

大概200毫秒给richTextBox追加一次值

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:37
提问于:2013-05-16 14:56
< >
分享
最佳答案
0

我试了一下,感觉不到卡,如果是获取数据的代码费时间,应该不会感觉卡,因为它在子线程里。给textbobox赋值的代码无法放入子线程,这个动作可能引起卡顿,你一次赋值多长的字符串呀;以下是我的测试代码:

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.Threading;

namespace ThreadTest
{
    public partial class Form1 : Form
    {
        private String _text = String.Empty;

        public Form1()
        {
            InitializeComponent();
            this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);     
            this.timer1.Interval = 200;
            this.timer1.Tick += new EventHandler(timer1_Tick);

            this.backgroundWorker1.RunWorkerAsync();
            this.timer1.Start();
        }

        void timer1_Tick(object sender, EventArgs e)
        {
            this.textBox1.Text = _text;
        }

        void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            while (true)
            {
                _text += "昊天金阙无上至尊自然妙有弥罗至真玉皇上帝\r\n";
                Thread.Sleep(200);
            }
        }
    }
}
奖励园豆:5
会长 | 专家六级 |园豆:12401 | 2013-05-17 10:29

另外,你怎么会在子线程中操作控件呢?你怎么做到的啊,我试了下报错啊,你是winform程序吗?

会长 | 园豆:12401 (专家六级) | 2013-05-17 10:31

@会长: 委托即可实现,呵呵~用控件的BeginInvork~!

幻天芒 | 园豆:37175 (高人七级) | 2013-05-23 23:06
其他回答(3)
0

需要这么快吗  可不可以先存到缓存里面

丫的 | 园豆:1575 (小虾三级) | 2013-05-16 14:58

先存到缓存里面的话就一次性把所有数据展示出来,我是想把数据一条一条逐渐展示

支持(0) 反对(0) 拖鞋王子 | 园豆:37 (初学一级) | 2013-05-16 15:04
0

你不停的调用UI线程赋值当然会卡。

luofer | 园豆:468 (菜鸟二级) | 2013-05-16 17:01
0

不会卡的啊,200毫秒应该对程序来说,时间好长的,

你是不是调用的时候,加锁了啊.?可能是加锁的时候卡在那里了,

建议你用begininvoke实现

只会造轮子 | 园豆:2274 (老鸟四级) | 2013-05-17 10:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册