启动一个线程,让其从指定文件中一秒钟读取一行数据并且读一条在textbox中同步显示一条,并非读完之后全部显示,而且前面显示过的内容就不再读取也不能清空textbox后再次显示。求解高人速救

解决方案 »

  1.   


        public partial class Form1 : Form
        {
            private Thread updateThread;        public Form1() {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e) {
                updateThread =  new Thread(UpdateThread);
                updateThread.Start(@"D:\Test.txt");
            }        private void UpdateThread(object fileName) {
                using (StreamReader reader = new StreamReader(fileName as string)) {
                    string line = null;
                    while ((line = reader.ReadLine()) != null) {
                        textBox2.AppendText(line + "\r\n");
                        Thread.Sleep(1000);
                    }
                }
            }        private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
                updateThread.Abort();
            }
        }
      

  2.   


            private void Start()
            {
                String strText = String.Empty;
                using (StreamReader sr = new StreamReader("D:\\1.txt"))
                {
                    strText = sr.ReadLine();
                    while (!strText.Equals("\0"))
                    {
                        textBox1.Text += strText;
                        strText = sr.ReadLine();
                        Thread.Sleep(1000);
                    }
                    sr.Close();
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                Thread thread = new Thread(new ThreadStart(Start));
                thread.Start();
            }
      

  3.   


            private void Start()
            {
                using (StreamReader sr = new StreamReader("D:\\1.txt"))
                {
                    while (!sr.EndOfStream)
                    {
                        textBox1.AppendText(sr.ReadLine());
                        Thread.Sleep(1000);
                    }
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                Thread thread = new Thread(new ThreadStart(Start));
                thread.Start();
            }
      

  4.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;namespace testForm
    {
        public partial class Form1 : Form
        {
            public FileStream fs;
            public StreamReader sr;        public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                fs = new FileStream(@"D:\aaa.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 1, true);
                sr = new StreamReader(fs);
                timer1.Interval = 1000;
                timer1.Enabled = true;
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                string readString = string.Empty;
                readString = sr.ReadLine();
                if (readString != null)
                {
                    if (richTextBox1.Text == "")
                    {
                        richTextBox1.Text = richTextBox1.Text + readString;
                    }
                    else
                    {
                        richTextBox1.Text = richTextBox1.Text + "\r\n" + readString;
                    }
                }
                else
                {
                    sr.Close();
                    fs.Close();
                    timer1.Enabled = false;
                }
            }
        }
    }
      

  5.   

    用定时器勾起一个线程,在form的Load事件中初始化fs和sr以及timer1的各项参数,读取文件的操作放到timer1的Tick事件中,内容放入一个RichTextBox中,当读取文件结束后关闭sr和fs,并设置timer1不可用。
      

  6.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;namespace testForm
    {
        public partial class Form1 : Form
        {
            //文件流
            public FileStream fs;
            //读取流
            public StreamReader sr;        public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                //以读权限打开D盘中的aaa.txt文件
                fs = new FileStream(@"D:\aaa.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 1, true);
                //以fs初始化sr
                sr = new StreamReader(fs);
                //设置timer1的interval为1000毫秒,即1秒,意思是每过1秒钟触发一次timer1的Tick事件
                timer1.Interval = 1000;
                //设置timer1可用,默认情况下timer1不可用
                timer1.Enabled = true;
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                //readString存放按行读取的数据
                string readString = string.Empty;
                //按行读取数据
                readString = sr.ReadLine();
                //readString != null即文件未读完
                if (readString != null)
                {
                    if (richTextBox1.Text == "")
                    {
                        //读取的数据是文件中的第一行数据
                        richTextBox1.Text = richTextBox1.Text + readString;
                    }
                    else
                    {
                        //读取的数据不是文件中的第一行数据
                        richTextBox1.Text = richTextBox1.Text + "\r\n" + readString;
                    }
                }
                else
                {
                    //关闭sr
                    sr.Close();
                    //关闭fs
                    fs.Close();
                    //设置timer1不可用,即使timer1的Tick事件不会再被触发
                    timer1.Enabled = false;
                }
            }
        }
    }
      

  7.   

    +1 至于你的textbox 不太明白你想干嘛
      

  8.   


            public Form1()
            {
                InitializeComponent();
                CheckForIllegalCrossThreadCalls = false;
            }        private void button1_Click(object sender, EventArgs e)
            {
                Thread thread = new Thread(new ThreadStart(Start));
                thread.Start();
            }        private void Start()
            {
                using (StreamReader sr = new StreamReader("D:\\a.txt"))
                {
                    while (!sr.EndOfStream)
                    {
                        textBox1.AppendText(sr.ReadLine() + "\r\n");
                        Thread.Sleep(1000);
                    }
                }
            }
    修改了下
    进程间不可操作去掉了
      

  9.   

    加行号的话做如下修改(注意红字部分):       //文件流
            public FileStream fs;
            //读取流
            public StreamReader sr;       //行号
            int lines=0;
            private void timer1_Tick(object sender, EventArgs e)
            {
               //readString存放按行读取的数据
                string readString = string.Empty;
                //按行读取数据
                readString = sr.ReadLine();
                //readString != null即文件未读完
                if (readString != null)
                {
                    lines++;                if (richTextBox1.Text == "")
                    {
                        //读取的数据是文件中的第一行数据
                        richTextBox1.Text = richTextBox1.Text + readString;
                    }
                    else
                    {
                        //读取的数据不是文件中的第一行数据
                        richTextBox1.Text = richTextBox1.Text + "\r\n" + readString;
                    }
                }
                else
                {
                    //关闭sr
                    sr.Close();
                    //关闭fs
                    fs.Close();
                    //设置timer1不可用,即使timer1的Tick事件不会再被触发
                    timer1.Enabled = false;
                }
            }
      

  10.   

    颜色没起作用,你就和上面的对比着看吧,其实就是在公共变量定义里面定义了一个行号lines,在timer的tick事件里面每次读取一行就对lines加1。
      

  11.   

    timer的tick事件有误,还应该做如下修改:                if (richTextBox1.Text == "")
                    {
                        //读取的数据是文件中的第一行数据
                        richTextBox1.Text = lines.ToString() + ":" + richTextBox1.Text + readString;
                    }
                    else
                    {
                        //读取的数据不是文件中的第一行数据
                        richTextBox1.Text = lines.ToString() + ":" + richTextBox1.Text + "\r\n" + readString;
                    }