我有一个简单的代码,可以通过标签组件在GUI中显示时间序列。该代码在计时器的滴答事件中。有时,我收到“Microsoft.VisualStudio.Debugger.Runtime.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);
最佳答案
最有可能是Timer事件正在从另一个线程(例如从Timer.Interval事件)访问控件。为避免此问题,必须检查Control.InvokeRequired属性,如果为true,则必须使用Control.Invoke方法中的委托(delegate)来完成对控件的访问。
这样的一个例子如下:
void UpdateLabel(Label lbl, String text)
{
if (lbl.InvokeRequired)
{ lbl.Invoke(new Action<Label, String>(UpdateLabel), new object[] { lbl, text }); }
else
{ lbl.Text = text; }
}