2011-07-28 55 views
0

我有這樣的情況。定時器控件不能在ASP.net中工作

  1. TestClass的 - 在UI層中定義的類
  2. 測試 - 一類級變量
  3. Submit按鈕調用一個函數DoSomething的()..它執行業務內容層的一些操作不斷更新的狀態屬性類
  4. Timercontrol得到的狀態(從相同的變量測試),以在UI

顯示由一個線程提交按鈕運行(說線程1),並開始操作。是這個線程更新BL的狀態屬性嗎?每次運行TimerEvent(說線程2,3等)時,Timer控件都會創建一個新線程。這裏

問題是test.Status財產,這是由線程1更新是不能被其他線程訪問。它總是空,即使財產已經被線程1更新..

什麼解決方案? 在此先感謝

public class TestClass     //---->#1 
{ 
    private test = new Test() ;  //---->#2   

    protected void SubmitButon_Click(object sender, EventArgs e) 
    {    
     // This is performed by Thread1 
     test.DoSomeThing()    //------>#3 
    } 

    protected void UpdateTimer_Tick(object sender, EventArgs e) 
    { 
     // Timer controls sends out a new thread each time 
     Label1.Text = test.Status;   //------>#4 
    } 
} 
+0

使狀態屬性靜態(Test.Status)實際服務於此目的..但我想知道爲什麼它不適用於實例變量。 。 – Ananth

回答

1

這裏的樣品使用委託和更新UI對此語句從不同的線程

delegate string CallFunctionDelegate(string arg1, string arg2); 

    private void btnStart_Click(object sender, EventArgs e) 
    { 
     CallFunctionDelegate delegRunApps = new CallFunctionDelegate(DoSomeThingBig); 

     AsyncCallback CallBackAfterAsynOperation = new AsyncCallback(AfterDoingSomethingBig); 

     delegRunApps.BeginInvoke("", "", CallBackAfterAsynOperation, null); 
    } 

    private string DoSomeThingBig(string arg1, string arg2) 
    { 
     #region Implemetation of time consuming function 
     //Implemetation of time consuming function 

     for (int i = 0; i < 5; i++) 
     { 
      Thread.Sleep(1000); 

      if (btnStart.InvokeRequired) 
      { 
       btnStart.Invoke((new MethodInvoker(delegate { btnStart.Text = i.ToString(); }))); 
      } 
      else 
      { 
       btnStart.Text = i.ToString(); 
      } 
     } 
     #endregion 

     return arg1.Replace("freetime", arg2); 
    } 

    private void AfterDoingSomethingBig(IAsyncResult result) 
    { 
     MessageBox.Show("Finaly Done!! ;) "); 

     btnStart.Invoke((new MethodInvoker(delegate { btnStart.Text = "Start"; }))); 
    } 
1

問題是因爲一個新的實例由timerthread eachtime之後作爲2號線執行創建。 .Hence test.Status始終爲空..這是問題的原因

相關問題