Windows form зависает при попытке обновить пользовательский элемент управления-как это исправить?
Мы создаем 16 пользовательских элементов управления в форме windows. В пользовательском элементе управления отображается множество gif-анимаций. Я пытаюсь вызвать пользовательский элемент управления, чтобы обновить эти анимации, используя приведенный ниже код. guiLogUpdateButton_Click-это кнопка в форме windows. Существует задача, которая будет запускать функцию тестирования после нажатия кнопки. SlotModel - это объект пользовательского управления, содержащий всю информацию. UpdateView-это функция, называемая представлением пользовательского элемента управления. И по мере того, как анимация обновляется до формы windows, форма windows застревает/зависает на программном обеспечении.
private void guiLogUpdateButton_Click(object sender, EventArgs e) { Task b = Task.Run(() => { testing(); }); } private void testing() { SlotModel[] slotModel = new SlotModel[16]; for (int slotNumber = 0; slotNumber < 16; slotNumber++) { int i = slotNumber; slotModel[i] = new SlotModel(i); Task u = Task.Run(() => { slotModel[i].status.Clear(); slotModel[i].status.Add(enumSlotStatus.Running); UpdateView(slotModel[i]); Thread.Sleep(500); slotModel[i].status.Clear(); slotModel[i].status.Add(enumSlotStatus.Pass); UpdateView(slotModel[i]); Thread.Sleep(500); slotModel[i].status.Clear(); slotModel[i].status.Add(enumSlotStatus.Fail); UpdateView(slotModel[i]); Thread.Sleep(500); }); } }
//Это код для пользовательского элемента управления ниже
public void UpdateView(Gen5.Model.SlotModel slotModel) {
if (InvokeRequired) { this.Invoke((MethodInvoker)delegate { UpdateView(slotModel); }); } else { //this is where the user control get updated }<pre><pre>
Что я уже пробовал:
Мы пробуем другие способы сделать это, но все они создают отставание в программном обеспечении.