Разбейте загрузку данных на более мелкие куски, скажем, от 100 до 1000 строк за раз.Если сетка WPF привязана к вашей коллекции данных, и эта коллекция является наблюдаемой коллекцией (реализует INotifyCollectionChanged), WPF автоматически обновит отображение при добавлении новых данных в коллекцию.
Вам также следует рассмотреть возможность использования виртуализации.список элементов управления или сеток в сочетании с источниками данных подкачки, так что будут загружены только те данные, которые в данный момент отображаются на экране (вместо 1,2 миллиона строк данных в памяти).Это выполнит «чанкинг» для вас и позволит вам в основном представлять бесконечное количество данных пользователю с очень небольшим использованием памяти или задержкой в сети.
Ознакомьтесь с этой статьей о асинхронном получении данных для виртуального списка: Как заполнить ListView в виртуальном режиме асинхронно?