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

}

誰かが私にもっと正しいアプローチを教えてくれて、メールの送信中にコードビハインドからカウントを更新できることを示していただければ幸いです。

例:100の1を送信する100の10を送信する

4

1 に答える 1

1

コードビハインドでまたはタイマーを使用しThread.Sleep()ても役に立ちません。

ASP.NETは要求/応答モデルであり、UpdatePanelは部分的なページ更新を行いますが、この要求/応答モデルにも準拠しています。

UpdatePanelと同じタブにある(クライアント側の)タイマーを使用できます。

于 2012-10-07T09:00:10.750 に答える