从 C# 数据库提取数据时显示自定义进度条

本文关键字:自定义 显示 数据库 提取 数据 | 更新日期: 2023-09-27 18:34:51

我使用以下代码从数据库中获取数据并在dataGrid上显示数据 如何在从数据库获取数据时显示自定义进度条?

private void ReadRecords(){
        using (SqlConnection c = new SqlConnection(Properties.Settings.Default.Database1ConnectionString)) {
            try{
                c.Open();
                if (c.State == ConnectionState.Open) {
                    using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM Items ORDER BY item_id", c)) {
                        try {
                            DataTable t = new DataTable();
                            a.Fill(t);
                            dataGridView1.DataSource = t;
                        }
                        catch(Exception ex){
                            MessageBox.Show("Failed Fill Data :." + ex);
                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed To Open Connection :." + ex);
                return;
            }
        }
    }

从 C# 数据库提取数据时显示自定义进度条

这里的"诀窍"是适当地使用 UI 线程,如果您使用 UI 线程从数据库加载数据(通常由单击或加载事件导致(,则任何动画或进度指示器都将被冻结,因为 UI 线程正忙于数据操作。 您需要做的是线程化或通过 TPL"任务"输出数据加载操作,当该操作完成时Invoke一种方法来关闭进度指示器。

通过将数据操作线程化到非 UI 线程,UI 线程可用于执行动画。 下面是一个链接,详细介绍了如何调用 UI 线程:

在 ui 线程中执行委托(使用消息泵(

最简单的解决方案是显示没有任何进度值的加载指示器。

ShowProgressIndicator();
ReadRecords()
HideProgressIndicator();

如果要显示实际进度,则必须确定工作量。例如,假设总行数是整个工作。您可以通过除以 fetched rows / total rows count 来计算进度百分比。您应该向数据库发出多个请求以实现此类进度条。

首先 - 请求总行数。然后 - 按部分获取行,例如每个请求 500 行,直到所有行都提取。