从数据库加载到listView时,C#Winforms显示

时间:2014-09-11 09:55:33

标签: c# multithreading winforms ado.net

我从数据库加载到listView但我需要在加载时显示填充进度。目前,只有在加载完成后才会显示数据。这是我到目前为止所做的,感谢您的帮助:

string SQLCommand = "SELECT * FROM table";
using(SQLiteConnection con = new SQLiteConnection(connectionString))
{
    con.Open();
    using (SQLiteCommand cmd = new SQLiteCommand(SQLCommand, con))
    { 
        using (SQLiteDataReader rdr = cmd.ExecuteReader())
        {
            while (rdr.Read())
            {
                var v1 = (rdr[3].ToString());
                var v2 = (rdr[4].ToString());
                var v3 = (rdr[5].ToString());
                var v4 = (rdr[6].ToString());

                ListViewItem item1 = new ListViewItem(v1);
                item1.SubItems.Add(v4);
                item1.SubItems.Add(v2);
                item1.SubItems.Add(v3);
                lvwDetails.Items.AddRange(new ListViewItem[] { item1 });
                System.Threading.Thread.Sleep(2000);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您需要在后台线程或任务中进行SQL处理,并调用Dispatcher或UI线程进行更新。

在开始后台任务之前显示“正在加载”信息,然后当异步任务完成时,您应该调用UI线程以使用数据更新UI并删除加载信息

我不知道你的应用程序的所有上下文,但我假设你在那里显示的代码是在UI主线程下运行的,并且将Thread.Sleep放入isnt使其异步,它只是冻结你的UI直到加载完成。