【发布时间】:2014-03-12 15:55:45
【问题描述】:
我有一个 Web 应用程序(不是 Windows 窗体),用户从列表框(选择框)中选择项目并按下“提交”按钮。提交后,应用程序形成 SQL 查询并连接到数据库填充数据表 - 转换为 html 代码并在页面上打印表格。我想要做的是在他们按下提交按钮并且表格准备好在页面上显示时显示图像(向用户显示它在后台进行查询和构建表格等的某种指示),隐藏图像.到目前为止,这就是我所做的。
BackgroundWorker bw = new BackgroundWorker();
protected void Page_Load(object sender, EventArgs e)
{
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}
public void SQL_Query() {...database connection and fill up data table }
protected void Submit_Button(object sender, EventArgs e)
{
//LoadingImage.Visible = true; //this does not work
if (bw.IsBusy != true)
{
bw.RunWorkerAsync();
}
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
SQL_Query();
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true))
{
this.tbProgress.Text = "Canceled!";
}
else if (!(e.Error == null))
{
this.tbProgress.Text = ("Error: " + e.Error.Message);
}
else
{
//when the query is completed, customize the data and print it on page as label
LoadingImage.Visible = false;
if (SQLQuery_Table.Rows.Count >= 1)
{
CustomizedTable(SQLQuery_Table);
}
string str = Display_Table();
label.Text = str
}
}
现在,代码的问题是LoadingImage.Visible = true; 在按下按钮时不会显示图像。根据我对其他关于 backgroundworker 的类似帖子的阅读,它说 UI 不能在同一个线程中工作。我不想制作任何进度条,所以对 Reportprogress 不感兴趣。简单地说,使图像在提交按钮按下时出现并在bw_RunWorkerCompleted 中消失。当用户按下提交按钮时,如何使图像出现?我想保持简单,所以如果我可以避免为 Image 创建另一个后台工作人员,那就太好了。谢谢!
【问题讨论】:
标签: c# asp.net backgroundworker