多线程化datagridview行的格式?

时间:2009-09-16 21:51:24

标签: c# .net winforms multithreading datagridview

我已经阅读了许多关于使用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 个答案:

答案 0 :(得分:5)

您实际上无法执行另一个线程中的格式化,因为所有处理UI元素的操作都必须在UI线程上进行。您可以做的最好的事情是预先进行处理和决策,以便实际与GUI交互的代码尽可能简单和精简。

答案 1 :(得分:1)

我不认为多线程会帮助你在这里,因为任何与控件的交互都需要在GUI线程上发生(正如Adam指出的那样)。

上次我使用DataGridView时,我发现我最大的表现瓶颈是使用AutoSizeMode。不记得是否有一些特定的值是特别糟糕的,但它确实有点不同。我会尝试从那个属性开始。

答案 2 :(得分:0)

我不记得.NET是否有一个选项可以暂停屏幕更新,同时对表单控件进行一系列更改。如果是这样,那可能会加快您的UI更改。

答案 3 :(得分:0)

正如大家所提到的,您只能从GUI线程更新UI。但是,您可以做的是在单独的线程上移动创建my_view的代码。