C# 从代码隐藏开始每2秒刷新UpdatePanel区域
我正在开发一个小的时事通讯应用程序,它可以向少量用户发送时事通讯,比如说100-200个用户 我希望管理员通过显示计数器并将电子邮件地址添加到列表框中,每2-3秒查看新闻稿广播的进度 我正试图通过以下代码实现这一点。我添加了部分代码。它工作正常,但在向所有用户发送电子邮件后显示结果。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
受保护的无效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);
}