作者liaommx (Orz)
看板C_Sharp
标题Re: [问题] Text方法会丢出未知的例外?
时间Thu May 21 09:43:25 2009
看起来像是因为跨thread更改文字的关系.
假设是label
你的label建立以及更改text是在主执行绪下建立的.
所以唯有在同一执行绪下的函式可以更改文字.
我这边提供一个跨执行绪更改文字的方法.
我目前是用这个方法.
首先在form的主函式下面宣告一个
private delegate void UpdateUICallBack(string value, Control ctl);
//跨执行绪更改label文字内容,需用委派方法
内容是
private void UpdateUI(string value, Control ctl)
{
if (this.InvokeRequired)
{
UpdateUICallBack uu = new UpdateUICallBack(UpdateUI);
this.Invoke(uu, value, ctl);
}
else
{
ctl.Text = value;
}
}
之後只要跨执行绪要更改文字的地方.
就呼叫UpdateUI("XD",label3)
这样就可以把label3的文字改成XD了.
这样做的好处是,不必怕多执行绪的状况下会同时改到同样的内容
当然virdust2003的方法也可以.
他的方法比较偏向把限制解除
允许不同的执行绪跨执行绪改文字.
但是这样的话,
写程式的人就要保证不同执行绪不会同时都要更改内容.
不然可能会造成更严重的错误(吧?)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.125.83.171
※ 编辑: liaommx 来自: 118.169.184.139 (05/23 08:10)