2011-08-04 22 views
0

私は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()));   

     } 
    } 
+0

を処理しますか – Becuzz

+0

更新パネルでこのメッセージを変更しますか?あなたのaspxページはどのように見えますか? – Becuzz

+0

はいアップデートパネルとボタンとリストボックスがあり、タイマーはアップデートパネルにあります – Mohsan

答えて

0

を処理するためであります。このリストの上位は、マネージャーをページ外に住むシングルトンにすることです。あなたのコードを持っている方法では、マネージャオブジェクトはすべてのページ要求(タイマーのティックを含む)でインスタンス化されます。長時間実行でこの記事をチェックアウトすることは、我々が起こっているまさに見ることができますので、あなたのコードを共有することはできますか?

http://msdn.microsoft.com/en-us/magazine/cc163553.aspx

+0

実行中の例ページをリロードせずにSOのアップデートがどのように応答するのですか? – Mohsan

関連する問題