Ваш код выполняется в потоке пользовательского интерфейса (в том же потоке, который обновляет экран). Следовательно, когда вы выполняете какие-либо вычислительные операции, ваш пользовательский интерфейс будет зависать. Длительные операции должны выполняться в отдельном потоке, чтобы приложение оставалось отзывчивым. Начните новый поток и внутри вашего потока переберите ваш цикл и создайте экземпляры ваших объектов. Чтобы добавить объекты на холст, вам нужно будет использовать Dispatcher
, чтобы гарантировать выполнение части кода в потоке пользовательского интерфейса.
MyElement element = new MyElement();
Dispatcher.BeginInvoke(() => AddElementToCanvas(element));