ControlCollection
реализует IEnumerable
, но не IEnumerable<T>
. IEnumerable<T>
- это тип, который Parallel.ForEach
ожидает.
Чтобы преобразовать коллекцию элементов управления в IEnumerable (Of Control), вы можете использовать
Dim controls = Me.PanelMain.Controls.Cast(Of Control)()
Parallel.ForEach(controls, Sub(control) control.Size = New Size(GWidth, GHeight))
Обратите внимание, что элементы управления пользовательского интерфейса могут обновляться только на нить они были созданы на. Таким образом, разделение изменения размера между несколькими потоками не будет работать так, как вы ожидаете.
Я бы пересмотрел наличие сотен ящиков для фотографий в форме, может ли пользователь видеть все ящики для фотографий одновременно?
Тем не менее, вы можете попытаться ускорить обновление элементов управления, приостановив перерисовку формы после каждого изменения размера элемента.
Me.PanelMain.SuspendLayout();
Dim newSize As New Size(GWidth, GHeight)
For Each p As Control In Me.PanelMain.Controls
p.Size = newSize
Next
Me.PanelMain.ResumeLayout();