我正在开发一个小的时事通讯应用程序,可以发送时事通讯给少量用户,让我们说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);
}}
如果有人能给我指出一个更正确的方法,我将不胜感激,并展示我可以在发送电子邮件时从后台代码更新计数。
示例: 100人中的1人发送100人中的10人
发布于 2012-10-07 17:00:11
在代码隐藏中使用Thread.Sleep()或计时器对您没有帮助。
ASP.NET是一种请求/响应模型,UpdatePanel执行部分页面更新,但也遵循此请求/响应模型。
您可以使用与UpdatePanel位于同一选项卡上的the (Client side) Timer。
https://stackoverflow.com/questions/12766643
复制相似问题