2011-10-19 204 views
1

我有一個簡單的代碼來顯示一個標籤組件在我的GUI中的時間序列。此代碼位於計時器的滴答事件中。有時,我得到「Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException」,我不知道爲什麼?我怎樣才能捕捉到這個異常?我怎樣才能更改我的代碼,以免得到這個異常?我該如何處理「CrossThreadMessagingException」?

//Calculate and show elapsed time 
    TimeSpan ElapsedTime = DateTime.Now - this.StartTime; 
    this.LabelElapsedTime.Text = String.Format("{0:00}:{1:00}:{2:00}", ElapsedTime.Hours, ElapsedTime.Minutes, ElapsedTime.Seconds); 
+3

什麼是堆棧跟蹤?哪個計時器? – SLaks

+0

我只有一個1000毫秒間隔的計時器。 – moorara

+3

哪個定時器類? –

回答

6

計時器事件很可能是從另一個線程(如Timer.Interval事件)訪問控件。爲避免此問題,必須檢查Control.InvokeRequired屬性,如果爲true,則必須使用Control.Invoke方法中的委託來完成控件訪問。

這方面的一個例子是如下:

void UpdateLabel(Label lbl, String text) 
{ 
    if (lbl.InvokeRequired) 
    { lbl.Invoke(new Action<Label, String>(UpdateLabel), new object[] { lbl, text }); } 
    else 
    { lbl.Text = text; } 
}