C# 从代码隐藏开始每2秒刷新UpdatePanel区域

C# 从代码隐藏开始每2秒刷新UpdatePanel区域,c#,asp.net-ajax,updatepanel,webforms,C#,Asp.net Ajax,Updatepanel,Webforms,我正在开发一个小的时事通讯应用程序,它可以向少量用户发送时事通讯,比如说100-200个用户 我希望管理员通过显示计数器并将电子邮件地址添加到列表框中,每2-3秒查看新闻稿广播的进度 我正试图通过以下代码实现这一点。我添加了部分代码。它工作正常,但在向所有用户发送电子邮件后显示结果。 受保护的无效btnSendNewsletter\u单击(对象发送者,事件参数e) { 数据集ds=新数据集(); string strSql=“从订阅中选择不同的(电子邮件),其中unsubscriber=0

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

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

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




受保护的无效btnSendNewsletter\u单击(对象发送者,事件参数e) { 数据集ds=新数据集(); string strSql=“从订阅中选择不同的(电子邮件),其中unsubscriber=0”; 整数计数器,总计行数; 计数器=0; ds=数据提供程序.Connect\u Select(strSql); totalRows=ds.Tables[0].Rows.Count; DataTable dt=ds.表[0]; foreach(数据行中的数据行dRow) { to=ds.Tables[0]。行[0][“Email”]。ToString(); 发送电子邮件时事通讯(收件人、主题、消息、isHtml); 计数器=计数器+1; lblCounter.Text=“发送”+totalRows.ToString()中的“+counter.ToString()+”; updpanelnewsletteprogress.Update(); 系统线程线程睡眠(2000); }
}

如果有人能给我指出一个更正确的方法,我将不胜感激&表明我可以在发送电子邮件时从代码背后更新计数

示例:发送100个中的1个 使用
Thread.Sleep()
或代码隐藏中的计时器发送100个线程中的10个不会对您有所帮助

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


您可以使用与UpdatePanel位于同一选项卡上的

您应该查找Comet。此外,我认为在这种情况下,
signar
()可能对您有用。相反的方法(使用java脚本计时器轮询)将是一个更简单的解决方案,直到完全支持html 5。当然,它不会100%精确,而且总是会有最大可能的延迟,但网站无论如何都不是实时系统:)
 <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);
    }