单击按钮时更改标签文本还可以执行其他方法

时间:2018-08-01 15:04:13

标签: c# asp.net winforms

我正在尝试使用其他方法执行的统计信息更新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解决方案,但是在运行代码但标签未更新的问题上却遇到了同样的问题。任何帮助将不胜感激,这件小事已经困扰了我几个小时。

2 个答案:

答案 0 :(得分:1)

我最终通过将zip文件的路径写入表单上的标签按钮来解决此问题,而不是通过单击按钮将其发送给客户浏览器上的下载权。问题是在发送zip文件进行下载后,请求已结束。为了确保这两种方法都在适当的时间运行,我将对scrape_work方法的调用移到了statistics

的内部

为了使路径可单击并正确下载文件,我必须在.aspx页面中以LinkBut​​ton的形式制作“标签”

<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();
    }
}

}

结果: enter image description here