C# datagridview行的多线程格式化?

C# datagridview行的多线程格式化?,c#,.net,winforms,multithreading,datagridview,C#,.net,Winforms,Multithreading,Datagridview,我已经阅读了许多关于使用BackgroundWorker对象来处理执行时间密集型任务的示例,这些任务会生成用于填充DataGridView的结果。然而,在我的例子中,似乎填充DataGridView的行为花费的时间最多。我想知道这是否是因为我需要格式化结果(隐藏某些列,检查每行上的某些标志以设置颜色/字体等) 例如: DataTable results_table; DataGridView my_grid; DataView my_view; private void fillTable()

我已经阅读了许多关于使用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.
    }
}

这是正确的方法吗,还是有其他方法可以格式化结果而不必遍历每一行?

我认为多线程在这里对您没有帮助,因为与控件的任何交互都需要在GUI线程上进行(Adam也指出了这一点)


上次使用
DataGridView
时,我发现最大的性能瓶颈是使用
AutoSizeMode
。我不记得是不是某个特定的值特别糟糕,但它确实有点不同。首先,我将对该属性进行实验。

我认为多线程在这里对您没有帮助,因为与控件的任何交互都需要在GUI线程上进行(正如Adam指出的那样)


上次使用
DataGridView
时,我发现最大的性能瓶颈是使用
AutoSizeMode
。我不记得是不是某个特定的值特别糟糕,但它确实有点不同。首先,我将尝试使用该属性。

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

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

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

我不记得.NET是否有一个选项,可以在您对表单控件进行大量更改时挂起屏幕更新。如果这样做,可能会加快您的UI更改。

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

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

正如Fredrik所指出的,使用“AutoSizeMode”属性(特别是当它设置为“AllCells”时)造成了最大的延迟。现在所有列都设置为“填充”,即使采用逐行格式(粗体、下划线等),性能影响也不那么显著。正如Fredrik指出的,“AutoSizeMode”属性的使用(特别是当它设置为“AllCells”时)造成了最大的延迟。现在,所有列都设置为“填充”,即使采用逐行格式(粗体、下划线等),性能影响也要小得多。