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

解决方案 »

  1.   

    假的进度条? 没尝试过啊,那该怎么控制呢? 另外有没有好的方法对 listbox 中的 item数据进行排序呢?
      

  2.   


    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;
            }
    最简单的代码实现
    不用拖后台线程组件去做
      

  3.   

    刚学c#,对这个问题不太懂,感觉有点难。另外 能否用 新开线程读取数据来防止长任务的假死,而进度条部分用个图片来代替?不用 progressBar 大家给个建议,谢谢