У меня есть приложение, которое должно содержать элементы в больших количествах и непрерывно во ListViews управления:System.argumentoutofrangeexception в то время ВЫЗОВ Listviewitems используя итераторы
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
deg_loadfile load = new deg_loadfile(loadfile);
load.BeginInvoke(new AsyncCallback(loadcallback),null);
}
void countfile() {
int listcount = listView1.Items.Count;
for (int x = 0; x < listcount; x++) {
listView1.BeginInvoke((MethodInvoker)delegate {
listView1.Items[x].SubItems[1].Text = "ok";
listView1.Items[x].SubItems[2].Text = "ok";
listView1.Items[x].SubItems[3].Text = "done";
},x);
}
}
void countcallback(IAsyncResult ae) {
MessageBox.Show("count finished");
}
delegate void deg_count();
void loadcallback(IAsyncResult ae) {
MessageBox.Show("finished");
}
delegate void deg_loadfile();
void loadfile() {
string file = File.ReadAllText("hughlist.txt");
string[] files = Regex.Split(file,"\n");
foreach (string str in files) {
listView1.BeginInvoke((MethodInvoker)delegate {
ListViewItem item = new ListViewItem(str);
item.SubItems.Add("");
item.SubItems.Add("");
item.SubItems.Add("");
listView1.Items.Add(item);
},str);
}
}
private void button2_Click(object sender, EventArgs e)
{
deg_count count = new deg_count(countfile);
count.BeginInvoke(new AsyncCallback(countcallback),null);
}
Код выше броски system.argumentoutofrangeexception (см рисунок ниже)
ссылка на изображение: http://i.stack.imgur.com/WJ7sA.png
итерация превысил условия, которые я дал, почему это произошло (примечание: в моем случае, я должен использовать «для» вместо «Еогеасп» или другое перечисление)?
ТНХ
UPDATE: ТНХ к @saruman для ответа (ключевое слово «доступ к модифицированному закрытия»), я уже обновил код, как показано ниже
for (int x = 0; x < listcount; x++) {
var x1=x;
listView1.BeginInvoke((MethodInvoker)delegate
{
listView1.Items[x1].SubItems[1].Text = "ok";
listView1.Items[x1].SubItems[2].Text = "ok";
listView1.Items[x1].SubItems[3].Text = "done";
}, x1); }
Выполняет ли цикл хотя бы один раз? –
@ l19 да, он выполняется один раз, а затем генерирует исключение – mysticcode