我正在尝试使用其他方法执行的统计信息更新Windows窗体上的标签,该统计信息会抓取网页并创建链接的zip文件并创建站点地图页面。优选地,该按钮将运行抓取操作并正确报告统计信息。目前,抓取过程运行良好,但单击按钮后我要使用统计数据更新的标签未更改。这是我的代码现在的样子:
protected void btn_click(object sender, EventArgs e)
{
//Run scrape work
scrape_work(sender, e);
//Run statistics work
statistics(sender, e);
}
protected void scrape_work(object sender, EventArgs e)
{
//Scraping work (works fine)
}
protected void statistics(object sender, EventArgs e)
{
int count = 0;
if (scriptBox.Text != null)
{
count += 1;
}
var extra = eventsBox.Text;
var extraArray = extra.Split('\n');
foreach (var item in extraArray)
{
count += 1;
}
//scrapeNumLbl is label I want to display text on
scrapeNumLbl.Text = count.ToString();
}
我必须为此过程使用线程化,还是有其他方法可以使该过程正常工作?我已经尝试过this解决方案,但是在运行代码但标签未更新的问题上却遇到了同样的问题。任何帮助将不胜感激,这件小事已经困扰了我几个小时。
答案 0 :(得分:1)
我最终通过将zip文件的路径写入表单上的标签按钮来解决此问题,而不是通过单击按钮将其发送给客户浏览器上的下载权。问题是在发送zip文件进行下载后,请求已结束。为了确保这两种方法都在适当的时间运行,我将对scrape_work
方法的调用移到了statistics
为了使路径可单击并正确下载文件,我必须在.aspx页面中以LinkButton的形式制作“标签”
<asp:LinkButton ID="lblDownload" runat="server" CssClass="xclass" OnClick="lblDownload_Click"></asp:LinkButton>
并使lblDownload_Click
如下运行:
Response.Clear();
Response.BufferOutput = false;
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "attachment; filename=zipFiles.zip");
string folder = Server.MapPath("~/zip");
string endPath = folder + "/zipFiles.zip";
Response.TransmitFile(endPath);
Response.End();
以这种方式运行页面时,页面会重新加载,并正确书写新标签,并且可以下载zip文件。
答案 1 :(得分:0)
假设此代码正在同步运行(您没有在未看到的呼叫中使用抓取代码),确定要到达设置标签文本的代码吗?我简化了您的代码,如下所示(删除了数组上的迭代,只将标签文本设置为字符串化的整数),并且更改标签文本没有任何麻烦。
namespace SimpleTest
{ 公共局部类Form1:表单 { 公共Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e)
{
scrape_work(sender, e);
statistics(sender, e);
}
protected void scrape_work(object sender, EventArgs e)
{
//Scraping work (works fine)
}
protected void statistics(object sender, EventArgs e)
{
int count = 666;
scrapeNumLbl.Text = count.ToString();
}
}
}