文本文件导入listbox 时 进度条控制问题

likehukai 2009-04-17 01:38:12
文本中的数据逐行读入 listbox中,用下面的方法

StreamReader sr = new StreamReader("aaa.txt");
String line;
while ((line = sr.ReadLine()) != null)
{
this.listBox1.Items.Add(line);
}

怎么设置一个进度条来显示 文件加载进度呢?怎么判断当前已经读取的数据量呢?
...全文
202 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingzhilian2008 2009-04-20
  • 打赏
  • 举报
回复
backgroundworker
xufzu123 2009-04-20
  • 打赏
  • 举报
回复
学习了~~
likehukai 2009-04-18
  • 打赏
  • 举报
回复
刚学c#,对这个问题不太懂,感觉有点难。

另外 能否用 新开线程读取数据来防止长任务的假死,而进度条部分用个图片来代替?不用 progressBar 大家给个建议,谢谢
陌上花花 2009-04-18
  • 打赏
  • 举报
回复
帮顶下
likehukai 2009-04-18
  • 打赏
  • 举报
回复
刚没注意,注释的地方写了, 但还是不懂 进度比 该怎么设置
likehukai 2009-04-18
  • 打赏
  • 举报
回复
感谢5楼 的热心帮助,可代码中的 文件读取 与 进度条没有关联啊?

欢迎大家一起来探讨。
chj6818112 2009-04-18
  • 打赏
  • 举报
回复
文件读取的时候有没有读到吧?
wangkuang5 2009-04-18
  • 打赏
  • 举报
回复

private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Text File(*.txt)|*.txt";
ofd.Multiselect = false;
if (ofd.ShowDialog() == DialogResult.OK) {
ThreadPool.QueueUserWorkItem(new WaitCallback(AddTextLine), ofd.FileName);
}
}

void AddTextLine(object file) {
string filepath = file.ToString();
System.IO.StreamReader sr = new System.IO.StreamReader(filepath,Encoding .Default);//注意编码的乱码
String line;
while ((line = sr.ReadLine()) != null)
{
//自己先计算好进度比value,下面就更新进度
//progressBar1.BeginInvoke(new ProgressValueHandler(ProgressValueChange), new object[] { value });
listBox1.BeginInvoke(new AddTextLineHandler(ListTextLine), new object[] { line });
}
}


delegate void AddTextLineHandler(string line);
void ListTextLine(string txt) {
if (listBox1.InvokeRequired) {
AddTextLineHandler handler = new AddTextLineHandler(ListTextLine);
listBox1.Invoke(handler, new object[] { txt });
}
listBox1.Items.Add(txt);

}
delegate void ProgressValueHandler(int val);
void ProgressValueChange(int value)
{
if (progressBar1.InvokeRequired) {
ProgressValueHandler handler = new ProgressValueHandler(ProgressValueChange);
progressBar1.Invoke(handler, new object[] { value });
}
progressBar1.Value = value;
}




最简单的代码实现
不用拖后台线程组件去做
likehukai 2009-04-18
  • 打赏
  • 举报
回复
假的进度条? 没尝试过啊,那该怎么控制呢? 另外有没有好的方法对 listbox 中的 item数据进行排序呢?
dawnbear 2009-04-17
  • 打赏
  • 举报
回复
出现假死情况的话 你只好new一个线程对象来执行读取文本这个方法了 这样的话至少解决了假死
还有就是进度条的问题
如果文本很大的话 就比较麻烦 因为要获取文本的总行数的话就要耗费一定时长了 这种情况干脆做个假的进度条吧 嘿嘿
但是如果文本不大的话 先判断文本的总行数 然后判断listview的行数到了能显示一格的百分比没有 从而设置进度条
likehukai 2009-04-17
  • 打赏
  • 举报
回复
哪位高人给个代码看看。
另外,在读取较大文本时,页面会出现假死问题,这个要用线程 、委托解决? 怎么实现呢?
whoami333 2009-04-17
  • 打赏
  • 举报
回复
先获取文件字节数,然后对已读取行的字节数进行累加,除以总字节数。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧