gpt4 book ai didi

c# DatagridView 控件(VirtualMode)和线程

转载 作者:行者123 更新时间:2023-11-30 18:03:10 27 4
gpt4 key购买 nike

我在虚拟模式和线程中遇到 DataGridView 控件的奇怪问题。我使用缓存类来存储 2 页数据。当我向下滚动并且我必须在缓存中加载一个新页面时,在显示数据之前会有一点延迟(没关系)。但是,而不是有显示的下一行(第 199、200、201),控件跳过许多行(CellValueNeeded)。例如,我缓存了 1 到 200 行,当我滚动到 199 时,我将页面加载到 200 à 299。但是,在数据网格中,它显示的是第 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使用线程加载数据。

最佳答案

Does anyone have a idea or I can fix this?

您可以在后台线程中加载数据,但不能在后台线程中将其添加到主数据表中。

一种可能的方法是像您正在做的那样加载数据,但加载到一个单独的 DataTable 中。然后,您可以在 UI 线程上调用 DataSet.Merge将此数据正确地与您的绑定(bind)数据合并(这将是合理的快速)。

关于c# DatagridView 控件(VirtualMode)和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7435984/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com