首页 新闻 搜索 专区 学院

求助:这段代码如何使用多线程?

0
悬赏园豆:10 [已解决问题] 解决于 2010-12-01 09:01

代码的作用就是打开一个TXT文件,将文件内容写入richTextBox中,并将符合正则表达式的字符改变颜色。

 

private void open_Click(object sender, EventArgs e)//打开文件
{
this.richTextBox1.Clear();//清空
Encoding gb2312 = Encoding.GetEncoding("gb2312"); OpenFileDialog openFile = new OpenFileDialog();
if (openFile.ShowDialog() == DialogResult.OK)
{
textBox3.Text
= openFile.FileName;//保存文件路径
}
richTextBox1.Text
= regex2.Replace(File.ReadAllText(openFile.FileName, gb2312), "");//将文件用指定的编码输出,同时用正则去掉空格和换行
ManagerText(richTextBox1.Text,richTextBox1.Text.Length);
}


public void ManagerText(string txt,int txtLength) //处理richTextBox1中的文本,符合正则表达式的就改变颜色
{
for (int i = 0; i < txtLength; i++)
{
string[] result = regex.Split(txt, 2, i);
int m = result[0].Length;
MySelect(richTextBox1, m, Color.Red,
true);//改变颜色
}
}

public static void MySelect(System.Windows.Forms.RichTextBox tb,int m, Color c,bool font)//改变颜色
{
tb.Select(m,
1);
tb.SelectionColor
= c;
if (font)
tb.SelectionFont
= new Font("宋体", 10, (FontStyle.Bold));
else
tb.SelectionFont
= new Font("宋体", 10, (FontStyle.Regular));
}

 

 

在上面的代码中,如果打开的TXT文件字数太多的话,界面会卡住。初步确认是在改变字体颜色的时候发生,现在我想用多线程来处理改变字符的颜色。不知道该如何处理。求高人支招!!

问题补充: 或者有什么更好的方法,可以指点一下,望诸位不吝赐教!!
nightfire的主页 nightfire | 初学一级 | 园豆:94
提问于:2010-11-26 13:46
< >
分享
最佳答案
0

比较简单的方法,拖个BackgroundWoker组件,然后把读数据放到该组件的异步任务中,

1, 每次读取一行 ReadLine 这样就省掉了用正则去换行的操作;

2,将读取的一行用正则去掉空格;

3,将去掉空格的一行追加到RichTextBox中;

4,Thread.Sleep() 休息一下,让UI处理下RichTextBox的绘制.

5,回到1;

收获园豆:6
Launcher | 高人七级 |园豆:45045 | 2010-11-26 17:19
其他回答(1)
0

最简单的

ThreadPool.QueueWorkItem((state)=>

{

string text = regex2.Replace(File.ReadAllText(openFile.FileName, gb2312), "");

//`````回调更新控件

});

收获园豆:4
LittlePeng | 园豆:3395 (老鸟四级) | 2010-11-26 19:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册