为什么我的程序在选择条带时滞后

本文关键字:滞后 选择 我的 程序 为什么 | 更新日期: 2023-09-27 18:16:24

我有这个函数调用函数:

private void liguaneaRxToolStripMenuItem_Click(object sender, EventArgs e)
{
    FillLiguanea();
}

这是它调用的函数:

private void FillLiguanea()
{
    this.liguanea_LaneTableAdapter1.Fill(this.pharmaciesDataSet1.Liguanea_Lane);
    try
    {
        string connectionString = "Data Source=LPMSW09000012JD''SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
        SqlConnection con = new SqlConnection(connectionString);
        con.Open();
        string query = "SELECT * FROM dbo.Liguanea_Lane2";
        SqlCommand cmd = new SqlCommand(query, con);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            string scode = dr.GetString(dr.GetOrdinal("code"));
            comboBox2.Items.Add(scode);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

从SQL数据库中读取超过5000个数据,但是每次读取之前的20秒延迟将不能让最终用户满意。

我的问题是为什么会发生这种情况,有没有办法加快速度?

为什么我的程序在选择条带时滞后

您应该考虑一些注意事项,使表单在不冻结的情况下运行。

  1. 你应该在另一个线程中加载数据。您可以创建Thread,或使用BackgroundWorker或使用async/await模式,如这篇文章。

  2. 您正在使用listBox.Items.Add()逐个添加项目到ListBox。如果您想这样做,至少应该在添加循环之前调用listBox.BeginUpdate(),并在循环之后调用listBox.EndUpdate()。它对您的UI产生了令人印象深刻的影响。更多信息请看这篇文章。您可以呼叫AddRange或设置DataSource

public async Task<DataTable> GetDataAsync()
{
    var dt = new DataTable();
    var cn = @"Your Connection String";
    var cmd = @"SELECT Field1 FROM Table1";
    var da = new SqlDataAdapter(cmd, cn);
    await Task.Run(() => { da.Fill(dt); });
    return dt;
}   
private async void Form1_Load(object sender, EventArgs e)
{
    var data = await GetDataAsync();
    this.ListBox1.DataSource = data;
    this.ListBox1.DisplayMember= "Field1";
}