我该如何处理“CrossThreadMessagingException”?

我有一个简单的代码,通过标签组件在我的GUI中显示时间顺序。 此代码位于计时器的tick事件中。 有时,我得到“Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException”,我不知道为什么? 我怎么能抓住这个例外? 如何更改我的代码以避免出现此exception?

//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); 

很可能timer事件是从另一个线程访问控件,例如从Timer.Interval事件。 要避免此问题,必须检查Control.InvokeRequired属性,如果为true,则必须使用Control.Invoke方法中的委托来完成控制访问。

这方面的一个例子如下:

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