如何从线程内部更新列表框

本文关键字:更新 列表 内部 线程 | 更新日期: 2023-09-27 18:29:52

我的代码中出现错误:

跨线程操作无效:控件"listBox1"是从上创建的线程以外的线程访问的

代码:

 private void button2_Click(object sender, EventArgs e)
 {
     Thread t1 = new Thread(mult);
     t1.Start();
 }
 public void mult()
 {
     FileStream fq = new FileStream(textBox1.Text, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);
     StreamReader s = new StreamReader(fq);
     while (!s.EndOfStream)
     {
         Thread.Sleep(500);
         listBox1.Items.Add(s.ReadLine()); //error at this line
     }
     s.Close();

如何从线程内部更新列表框

在DOT-NET中,不能从用户创建的线程中修改UI元素。只允许主线程(创建控件的线程)修改它。这意味着,在新线程中不能更新列表框条目。

还有其他类似CCD_ 1的策略。请查看@Rotem发布的链接,并在谷歌上搜索BackgroundWorker。

更新:如果你按照链接并决定采用ListBox1.Invoke()的方式,那么我建议使用BeginInvoke代替Invoke

围绕这一点进行列表框更新。

this.Invoke(new MethodInvoker(delegate()
{
 //stuff
}));