C# 更改同时执行其他方法的按钮单击上的标签文本

C# 更改同时执行其他方法的按钮单击上的标签文本,c#,asp.net,winforms,C#,Asp.net,Winforms,我正在尝试使用另一个方法执行的统计信息更新windows窗体上的标签,该方法执行时会刮取网页,创建链接的zip文件,并创建站点地图页面。该按钮最好能运行刮削操作并正确报告统计数据。目前,刮削过程工作正常,但我想用统计数据更新的标签在单击按钮时没有改变。下面是我的代码现在的样子: protected void btn_click(object sender, EventArgs e) { //Run scrape work scrape_work(sender, e); /

我正在尝试使用另一个方法执行的统计信息更新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();
}

我是否必须使用线程来完成这个过程,或者是否有其他方法可以让这个过程正常工作?我已经尝试了解决方案,但遇到了代码运行但标签不更新的相同问题。任何帮助都将不胜感激,这个小问题已经困扰我好几个小时了。

假设此代码是同步运行的(您没有在我看不到的调用中处理刮片),您确定您正在访问设置标签文本的代码吗?我将您的代码简化如下(删除数组上的迭代,只将标签文本设置为字符串化整数),并且更改标签文本没有任何问题

namespace SimpleTest
{ 公共部分类Form1:Form { 公共表格1() { 初始化组件(); }

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

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

我最终解决了这个问题,我将zip文件的路径写入表单上的标签按钮,而不是在单击按钮时将其直接发送到客户端浏览器上进行下载。问题是请求在zip文件发送下载后结束。为了确保这两种方法在正确的时间运行,我将调用移动到了
scrape_工作
方法到内部的
统计

为了使路径可以点击,文件可以正确下载,我必须在.aspx页面中以链接按钮的形式制作“标签”

<asp:LinkButton ID="lblDownload" runat="server" CssClass="xclass" OnClick="lblDownload_Click"></asp:LinkButton>

以这种方式运行时,页面将重新加载正确写入的新标签和可下载的zip文件。

是的,我使用了断点来确保它到达了设置标签文本的代码。我尝试了此解决方案,但标签仍然没有更新。这可能与在s中完成的刮削工作有关吗防止页面更新标签的crape_工作方法?我可以通过单击按钮更改标签,该按钮仅引用统计信息,但最佳情况下,我希望这两个按钮同时运行,我已经调试过,并且它正在达到统计信息()只需调试您的代码,看看完成
scrape_work()
需要多长时间。就像@markaaronky建议的那样,您的代码可能没有达到
statistics()
。只有在scrape_工作方法完成后,您的统计方法才会启动。如果scrape_工作需要20分钟才能完成,则您必须等待整个20分钟才能调用统计信息。我们不知道Scrapbox或eventsBox是什么,因此无法判断这是否只是一个时间问题,或者是否有什么东西一直在失败g这意味着代码永远不会到达scrapnumbl.Text=count.ToString();@在代码中使用断点,我已经能够看到我的程序正在到达
scrapnumbl.Text=count.ToString())
scriptBox
eventsBox
只是一个文本框中的一系列链接,我将其输入到
scrape\u-work
中进行刮取。
scrape\u-work
只需将所需链接打印到页面上的一个隐藏标签,然后将其读写到一系列zip文件中。我认为它的问题可能在于页面从未被调用重新加载,因此标签从未更新。这是基于您的知识/经验的可能性吗?我对C#altogether还是很陌生。当您在标签上设置文本时,文本会立即显示。只要您没有阻止UI线程。Windows将确保屏幕得到更新,您不需要C所有mylabel.Refresh()或this.Invalidate()或DoEvents()。