线程不会执行

时间:2014-07-16 15:12:31

标签: c# multithreading arraylist

我有简单的应用程序。我有一个arraylist,这个列表包括网站。

单击按钮时出错。错误是;

  

System.Windows.Forms.dll中出现'System.InvalidOperationException'类型的第一次机会异常

     

附加信息:跨线程操作无效:控制'listBox2'从其创建的线程以外的线程访问。

     

如果存在此异常的处理程序,则可以安全地继续该程序。

代码如下:

    private void button2_Click(object sender, EventArgs e) {
        for (int i = 0; i < sitelist.Count; i++) {
            Thread thread = new Thread(getStatus);
            thread.Start((string)sitelist[i]);
        }
    }
    private void getStatus(Object obj) {
        listBox2.Items.Add("1");
    }

当我编写代码时:

    private void getStatus(Object obj) {
         MessageBox.Show((string)obj);
    }

它有效。我使用listbox时为什么会显示错误?

此致。 OMER。

1 个答案:

答案 0 :(得分:2)

您必须使用BeginInvoke

 private void getStatus(Object obj) {
        this.BeginInvoke(new EventHandler((s,e)=>{listBox2.Items.Add("1")}));
    }

原因是您不能触摸属性或影响WinForm控件的绘制从任何其他线程而不是主线程。你必须将一个回调编组回主线程,而Invoke / BeginInvoke将为你做这个。