Многопоточность форматирования строк просмотра данных? - PullRequest
1 голос
/ 17 сентября 2009

Я прочитал несколько примеров использования объектов BackgroundWorker для обработки выполнения трудоемких задач, которые генерируют результаты, которые используются для заполнения DataGridView. Однако в моем случае кажется, что заполнение DataGridView занимает больше всего времени. Мне интересно, если это потому, что мне нужно отформатировать результаты (скрыть определенные столбцы, проверить определенные флаги в каждой строке, чтобы установить цвет / шрифт и т.

Пример:

DataTable results_table;
DataGridView my_grid;
DataView my_view;

private void fillTable()
{
    // Generate the results
    ...


    // Bind the data.
    my_view.Table = results_table;
    my_grid.DataSource = my_view


    // Format the results
    my_grid.Columns[0].Visible = false;
    my_grid.Columns[1].Visible = false;

    my_grid.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
    my_grid.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

    foreach (DataGridViewRow row in my_grid.Rows)
    {
        // Check for flags and format necessary rows.
    }
}

Это правильный способ сделать это, или есть какой-то другой способ форматирования результатов без необходимости перебирать каждую строку?

Ответы [ 4 ]

5 голосов
/ 17 сентября 2009

Вы не можете сделать форматирование в другом потоке, так как все операции, связанные с элементами пользовательского интерфейса, должны выполняться в потоке пользовательского интерфейса. Лучшее, что вы могли бы сделать, - это выполнить свою обработку и принять решение заранее, чтобы код, который фактически взаимодействует с графическим интерфейсом, был максимально простым и понятным.

1 голос
/ 17 сентября 2009

Я не думаю, что многопоточность поможет вам в этом, поскольку любое взаимодействие с элементом управления должно все равно происходить в потоке GUI (как указывает Адам).

В прошлый раз, когда я работал с DataGridView, я обнаружил, что моей самой большой горловиной для бутылки производительности было использование AutoSizeMode. Не могу вспомнить, было ли это какое-то конкретное значение, которое было очень плохим, но это действительно имело небольшое значение. Я бы поэкспериментировал с этим свойством.

0 голосов
/ 18 сентября 2009

Как уже упоминалось, вы можете обновить свой интерфейс только из потока GUI. Но вы можете переместить код, который создает my_view, в отдельный поток.

0 голосов
/ 18 сентября 2009

Не могу вспомнить, есть ли в .NET возможность приостановить обновления экрана, пока вы вносите кучу изменений в элементы управления формы. Если это произойдет, это может ускорить изменения пользовательского интерфейса.

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