【发布时间】:2014-07-16 15:12:30
【问题描述】:
我有简单的应用程序。我有一个数组列表,这个列表包括网站。
单击按钮时出现错误。错误是;
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);
}
它有效。为什么我使用列表框时会显示错误?
真诚的。 奥马尔。
【问题讨论】:
-
显然,
MessageBox.Show方法没有与列表框相同的线程限制。询问如何从另一个线程更新列表框是完全不同的问题。 -
MessageBox 不会失败,因为它不会访问在主线程上创建的任何句柄,但它会失败,例如,如果您按 CTRL+C
标签: c# multithreading arraylist