我在虚拟模式和线程中使用DataGridView控件时遇到了一个奇怪的问题。我使用缓存类来存储2页数据。当我向下滚动并且必须在缓存中加载新页面时,会有一些延迟才会显示数据(这是可以接受的)。但是,控件跳过了许多行(CellValueNeeded),而不是显示下一行(199、200、201)。例如,我将1到200行缓存,当我在第199行滚动时,我正在加载200至299页。然而,在datagrid中,它显示了第320行,而不是第300行。(我按住鼠标按钮2-3秒钟,然后释放它)。我注意到只有在特定的线程中加载缓存时才会出现此问题。是否有人有办法解决这个问题?
private void datagridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
{
e.Value = m_rfiCache.RetrieveElement(e.RowIndex, e.ColumnIndex);
}
....
public DataTable SupplyPageOfData(int lowerPageBoundary, int rowsPerPage)
{
e : " + lowerPageBoundary);
DataTable dt = new DataTable();
if (m_useThreading) //THIS DOESN'T WORK WELL
{
Thread MulThread = new Thread(delegate()
{
dt = this.LoadData(lowerPageBoundary, rowsPerPage);
});
MulThread.Start();
MulThread.Join();
}
else //OK.
{
dt = this.LoadData(lowerPageBoundary, rowsPerPage);
}
return dt;
}
附注:这只是一个片段,我使用了外部API从ODB中提取数据。该API使用线程来加载数据。