私は1つの問題に直面しています。Asp.netイベントに基づいてラベルを更新します
私は何をしなければなりません。ページには、いくつかのジョブの処理を開始するボタンがあります。
私がスタートボタンを押すと、ジョブの総数を持つイベントを発生させる私のビジネスレイヤのProcessJobsメソッドを呼び出しています。 ListBoxコントロールでこの数を表示する必要があります。
ジョブの処理中に、同じイベントによっていくつかのステータスメッセージが生成されます。これらのメッセージは、リストボックスコントロールのWebフォームに表示する必要があります
しかし、私はそれ自体を更新するWebページを取得していません。私はまた、タイマーコントロールを追加し、1秒後にページを更新します。ページは更新されていません。ここ
はコード
Default.aspx.csここ
public partial class xxxxx: System.Web.UI.Page
{
private xxxx manager;
protected void Page_Load(object sender, EventArgs e)
{
if (this.manager == null)
{
manager = new xxxx();
this.manager.ProcessEmailEvent += new EventHandler<EventArg<string>>(manager_ProcessEmailEvent);
}
if (!Page.IsPostBack)
{
this.btnStop.Visible = false;
}
}
void manager_ProcessEmailEvent(object sender, EventArg<string> e)
{
this.lblStatus.Text = this.lblStatus.Text + "<br>" + e.Data;
}
protected void processEmailTimer_Tick(object sender, EventArgs e)
{
int tickCount = this.manager.EmailProcessCount;
int totalEmailCount = this.manager.TotalEmailsCount;
this.lblProcessEmail.Text = string.Format("Processing Emails <b>{0}</b> of <b>{1}</b>", tickCount, totalEmailCount);
}
protected void btnStart_Click(object sender, EventArgs e)
{
this.processEmailTimer.Enabled = true;
this.btnStart.Visible = false;
this.btnStop.Visible = true;
this.manager.ProcessEmails(this.chkValidateEmail.Checked, this.chkTesting.Checked);
}
protected void btnStop_Click(object sender, EventArgs e)
{
this.processEmailTimer.Enabled = false;
this.btnStart.Visible = true;
this.btnStop.Visible = false;
this.manager.Stop();
}
であるあなたは、これらのイベントが発生取得する方法にあなたの基本的なアプローチを変更する必要があり、ビジネス・ロジックが電子メールに
public event EventHandler<EventArg<string>> ProcessEmailEvent;
public void InvokeProcessEmailEvent(EventArg<string> e)
{
EventHandler<EventArg<string>> handler = ProcessEmailEvent;
if (handler != null) handler(this, e);
}
public void ProcessEmails(bool validateSenderEmail, bool deleteEmailAfterProcess)
{
// Creaate pop3 Client
POP3_Client popClient = new POP3_Client();
// Connect to POP3 host
popClient.Connect(Utility.POP3Host, Utility.POP3Port, Utility.UseSSL);
// Authenticate email address and password
popClient.Authenticate(Utility.EmailAddress, Utility.Password, false);
// Get Email count
int msgCount = popClient.Messages.Count;
// Raising event to update status on default.aspx
this.InvokeProcessEmailEvent(new EventArg<string>("Emails : " + msgCount));
TotalEmailsCount = msgCount;
// Start emai Processing
processEmailStarted = true;
for (int i = 0; i < msgCount; i++)
{
this.EmailProcessCount = i + 1;
// Raising event to update status on default.aspx
this.InvokeProcessEmailEvent(new EventArg<string>("Getting Email " + (i + 1)));
// Get message
var msg = popClient.Messages[i];
// Get Email header
Mail_Message mime = Mail_Message.ParseFromByte(msg.HeaderToByte());
StringBuilder sb = new StringBuilder();
this.InvokeProcessEmailEvent(new EventArg<string>("--------------------------------"));
this.InvokeProcessEmailEvent(new EventArg<string>("From : " + mime.From.ToString()));
this.InvokeProcessEmailEvent(new EventArg<string>("Subject : " + mime.Subject.ToString()));
this.InvokeProcessEmailEvent(new EventArg<string>("Date : " + mime.Date.ToString()));
this.InvokeProcessEmailEvent(new EventArg<string>("Size (KB): " + (msg.Size/(decimal)1000).ToString()));
}
}
を処理しますか – Becuzz
更新パネルでこのメッセージを変更しますか?あなたのaspxページはどのように見えますか? – Becuzz
はいアップデートパネルとボタンとリストボックスがあり、タイマーはアップデートパネルにあります – Mohsan