出现假死情况的话 你只好new一个线程对象来执行读取文本这个方法了 这样的话至少解决了假死
还有就是进度条的问题
如果文本很大的话 就比较麻烦 因为要获取文本的总行数的话就要耗费一定时长了 这种情况干脆做个假的进度条吧 嘿嘿
但是如果文本不大的话 先判断文本的总行数 然后判断listview的行数到了能显示一格的百分比没有 从而设置进度条
还有就是进度条的问题
如果文本很大的话 就比较麻烦 因为要获取文本的总行数的话就要耗费一定时长了 这种情况干脆做个假的进度条吧 嘿嘿
但是如果文本不大的话 先判断文本的总行数 然后判断listview的行数到了能显示一格的百分比没有 从而设置进度条
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;
}
最简单的代码实现
不用拖后台线程组件去做