2013-03-23 172 views
0

我的代碼顯示線程中線程無效的跨線程訪問 label_mytimer.Text = mytimeLeft +「Sec」;當在調試中運行時,但在正常執行時,它沒有問題。我怎樣才能避免多線程訪問,我知道問題是許多線程試圖同時訪問我的文本框控件,如果它工作,不知道如何使用backgroundworker。c#顯示線程無效的跨線程訪問問題

private void ttOnTimedEvent(object source, ElapsedEventArgs e) 
    { 
     if (mytimeLeft > 0) 
     { 

      // Display the new time left 
      // by updating the Time Left label. 
      mytimeLeft = mytimeLeft - 1; 
      label_mytimer.Text = mytimeLeft + " Sec";//Show time left 
     } 
     else 
     { 

      label_mytimer.Text = "OK..."; 
      mytimeLeft = int.Parse(tBox_rp_Time.Text); 

      mycountdownTimer.Stop(); 
      mycountdownTimer.Enabled = false; 

     } 
+0

只能從UI線程訪問WinForm的對象(可能是太一般化的) – Rob 2013-03-23 15:49:15

回答

0

您可以使用MethodInvoker對GUI線程運行

private void ttOnTimedEvent(object source, ElapsedEventArgs e) 
{  
    MethodInovker mi = new delegate{ 
    if (mytimeLeft > 0) 
    { 
     // Display the new time left 
     // by updating the Time Left label. 
     mytimeLeft = mytimeLeft - 1; 
     label_mytimer.Text = mytimeLeft + " Sec";//Show time left 
    } 
    else 
    { 
     label_mytimer.Text = "OK..."; 
     mytimeLeft = int.Parse(tBox_rp_Time.Text); 
     mycountdownTimer.Stop(); 
     mycountdownTimer.Enabled = false; 
    } 
    }; 
    if(InvokeRequired) 
     this.Invoke(mi); 
} 
+0

「錯誤\t 1型預期\t 「關於'委託'這個詞 – 2013-03-23 15:58:41

+0

它應該可用,請確保你使用委託而不是委託 – Adil 2013-03-23 16:11:48