я уже знаю, что контроль обновлять, я могу использовать Invoke ActionUpdate ListView из потока не исходный поток в C#
progressBar1.Invoke(new Action(() => { progressBar1.Maximum = 0; }));
Но это работает только с имуществом управления, которые являются единичными данные. Теперь у меня есть поток, который должен изменить коллекцию представлений списка элементов списка, очистить его, а затем обновить новыми элементами, новыми текстами и изображениями значков. В чем разница между ними: целое число или bool сравниваются с списком, массивом или набором целочисленного, bool или даже компонента, управления. Могу ли я просто просто добавить
string[] newItemText = {"item1", "item2", ...};
listView1.Invoke(new Action() => {
i = 0;
foreach(var item in listView1.Items)
{
item.Text = newItemText[i];
i++;
}
}));
Я, возможно, потребуется решение для моего списка зрения, но если у вас есть ответ, пожалуйста, четко объяснить, как и почему это работает, потому что мне нужно тщательно узнать об этом. Также вы можете заметить меня о риске при попытке этой практики.
EDIT: вопрос заключается не в том, как обновлять управление из других потоков. IT о том, когда и зачем нужно это делать, а не тому. Более того, мне нужно знать разные варианты обновления отдельных данных и обновления всей коллекции данных.
_ «Могу ли я просто добавить» _ - что случилось, когда вы это пробовали? Как это отличалось от того, что вы хотели? Не совсем ясно, каков ваш реальный вопрос. Вы, кажется, понимаете, что вам нужно делать. Итак ... сделайте это. Если у вас есть определенные проблемы с этим, объясните, что именно эта проблема. Предоставьте хороший [mcve], показывающий точно, что вы пробовали, а также четкое подробное объяснение того, что делает код, и что вы хотите, чтобы он это сделал. –
Если у вас много работы в пользовательском интерфейсе, вам нужно переосмыслить свой дизайн. Работа cpu/IO в фоновом режиме и пользовательский интерфейс работают по потоку пользовательского интерфейса как можно больше. Лучше, чем усложнять вещи. Взгляните на async/wait, это должно помочь. См. Http://blog.stephencleary.com/2012/02/async-and-await.html и проводник оттуда. –
Возможный дубликат [Как обновить GUI из другого потока в C#?] (Http: // stackoverflow.com/questions/661561/how-to-update-the-gui-from-another-thread-in-c) – VMAtm