【发布时间】:2014-11-07 15:15:15
【问题描述】:
我有一个使用 C# 的应用程序的 Windows 在这种形式中,我有一个按钮,它从 MSSQL 中的几个表中检索数据并将其显示在 DataGridView 中。我已经使用后台工作人员来获取视图,并且我有一个进度条,我想将其设置为选取框以向用户显示正在发生的事情,但是即使我在 DoWork 方法中有数据检索代码,进度条也没有响应,这是一些代码
The button calls the fillData() method and that method is as follows
public void fillData()
{
if (ConnectionString == "")
{
MessageBox.Show("You must connect to the server first", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
toolStripProgressBar1.Visible = true;
toolStripProgressBar1.Style = ProgressBarStyle.Marquee;
toolStripProgressBar1.MarqueeAnimationSpeed = 50;
//....更多代码在这里然后...
System.ComponentModel.BackgroundWorker backgroundworker1 = new System.ComponentModel.BackgroundWorker();
backgroundworker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
backgroundworker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundworker1_RunWorkerCompleted);
backgroundworker1.RunWorkerAsync();
}
然后我有 DoWork 方法
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Data.Tables.Clear();
Data.Locale = System.Globalization.CultureInfo.InvariantCulture;
System.Data.SqlClient.SqlDataAdapter masterDA = new SqlDataAdapter(sqlString, conn);
masterDA.Fill(Data, "ORDERS");
}
和 RunWorkerCompleted
private void backgroundworker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
toolStripProgressBar1.MarqueeAnimationSpeed = 0;
ordersDGV.DataSource = Data.Tables[0];
recordnoTSSL.Text = ordersDGV.Rows.Count.ToString();
}
但是一旦调用后台工作人员,UI 就会无响应,我认为这种技术可以让我显示进度条并保持 UI 响应, 我做错了什么?
【问题讨论】:
标签: datagridview progress-bar backgroundworker