Загрузка данных в сетку данных асинхронно - PullRequest
5 голосов
/ 13 декабря 2011

Я загружаю в сетку данных некоторые данные (1 200 000 строк), и приложение загружает слишком много времени и иногда зависает.

Я не знаю, как загрузить их асинхронно?(возможно с progressBar).

Могу ли я найти здесь какую-нибудь помощь?

Ответы [ 2 ]

5 голосов
/ 13 декабря 2011

У меня есть приложение, в котором я делаю нечто очень похожее, используя Threading. Этот код должен обновлять вашу сетку данных по одной строке за раз, когда работает код позади.

using System.Windows.Threading;

private void Run()
{
    try
    {
        var t = new Thread(Read) { IsBackground = true };
        t.Start();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

private void Read()
{
    foreach (/* whatever you are looping through */)
    {
        /* I recommend creating a class for the result use that for the 
           datagrid filling. */
        var sr = new ResultClass()

        /* do all you code to generate your results */

        Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
                               (ThreadStart)(() => dgResults.AddItem(sr)));   
    }    
}
3 голосов
/ 13 декабря 2011

Разбейте загрузку данных на более мелкие куски, скажем, от 100 до 1000 строк за раз.Если сетка WPF привязана к вашей коллекции данных, и эта коллекция является наблюдаемой коллекцией (реализует INotifyCollectionChanged), WPF автоматически обновит отображение при добавлении новых данных в коллекцию.

Вам также следует рассмотреть возможность использования виртуализации.список элементов управления или сеток в сочетании с источниками данных подкачки, так что будут загружены только те данные, которые в данный момент отображаются на экране (вместо 1,2 миллиона строк данных в памяти).Это выполнит «чанкинг» для вас и позволит вам в основном представлять бесконечное количество данных пользователю с очень небольшим использованием памяти или задержкой в ​​сети.

Ознакомьтесь с этой статьей о асинхронном получении данных для виртуального списка: Как заполнить ListView в виртуальном режиме асинхронно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...