0

我正在开发一个小型时事通讯应用程序,它可以向少数用户发送时事通讯,比如说 100-200 个用户。

我希望管理员通过显示计数器并将电子邮件地址添加到列表框,每 2-3 秒查看一次新闻通讯广播的进度。

我正在尝试使用以下代码来实现这一点。我添加了部分代码。它工作正常,但在向所有用户发送电子邮件后显示结果。

 <asp:UpdatePanel ID="updPanelNewsletterProgress" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
            <asp:Label ID="lblCounter" runat="server" Text=""></asp:Label><br /><br />
            <asp:CheckBoxList ID="cbListEmailsAddress" runat="server">
            </asp:CheckBoxList>
    </ContentTemplate>
</asp:UpdatePanel>  


protected void btnSendNewsletter_Click(object sender, EventArgs e)
{
    DataSet ds = new DataSet();
    string strSql = "SELECT DISTINCT(Email) FROM Subscribe WHERE unsubscriber=0";
    int counter, totalRows;
    counter = 0;
    ds = DataProvider.Connect_Select(strSql);
    totalRows = ds.Tables[0].Rows.Count;
    DataTable dt = ds.Tables[0];

    foreach (DataRow dRow in dt.Rows)
    {
        to = ds.Tables[0].Rows[0]["Email"].ToString();
        Helper.SendEmailNewsletter(to, subject, message, isHtml);
        counter = counter + 1;
        lblCounter.Text = "Sending " + counter.ToString() + " of " + totalRows.ToString();
        updPanelNewsletterProgress.Update();
        System.Threading.Thread.Sleep(2000);
    }

}

如果有人能指出我更正确的方法并显示我可以在发送电子邮件时从代码后面更新计数,我将不胜感激。

示例:发送 1 of 100 发送 10 of 100

4

1 回答 1

1

Thread.Sleep()在代码隐藏中使用或计时器对您没有帮助。

ASP.NET 是一个请求/响应模型,UpdatePanel 执行部分页面更新,但也遵循此请求/响应模型。

您可以使用与 UpdatePanel 位于同一选项卡上的(客户端)计时器。

于 2012-10-07T09:00:10.750 回答