C# datagridview行的多线程格式化?
我已经阅读了许多关于使用BackgroundWorker对象来处理执行时间密集型任务的示例,这些任务会生成用于填充DataGridView的结果。然而,在我的例子中,似乎填充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()
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”时)造成了最大的延迟。现在,所有列都设置为“填充”,即使采用逐行格式(粗体、下划线等),性能影响也要小得多。