首页 新闻 会员 周边

非界面线程操作控件的问题2

0
悬赏园豆:10 [已解决问题] 解决于 2008-08-28 15:37
<P>if (this.lblInfo.InvokeRequired)<BR>this.Invoke(new Action(() =&gt;<BR>{<BR>this.lblInfo.Text = "服务器连接失败,请稍后再试";<BR>Thread.Sleep(10000);<BR>this.lblInfo.Text = "";<BR>}));<BR>else<BR>{<BR>this.lblInfo.Text = "服务器连接失败,请稍后再试";<BR>Thread.Sleep(10000);<BR>this.lblInfo.Text = "";<BR>}</P> <P mce_keep="true">&nbsp;</P> <P>这段代码里的this.lblInfo.InvokeRequired是否必须,不是说this.Invoke什么情况下都能用吗?</P> <P>另外这段代码是想要实现一个文本显示10s然后消失的效果,代码有没有改进的空间,对于线程操作界面这块刚接触请指点</P>
问题补充: 刚测试了一下,代码肯定是有问题,呵呵, 后来我将代码改成了这样,可以运行,求代码的优化和挑错 _SetLblInfo("服务器连接失败,请稍后再试"); ThreadPool.RegisterWaitForSingleObject(new AutoResetEvent(false), new WaitOrTimerCallback(delegate(object o, bool b) { this._SetLblInfo(""); }), null, 10000, true); private void _SetLblInfo(string msg) { if (this.lblInfo.InvokeRequired) this.Invoke(new Action(() => { this.lblInfo.Text = msg; })); else this.lblInfo.Text = msg; }
lexus的主页 lexus | 初学一级 | 园豆:0
提问于:2008-08-28 00:11
< >
分享
最佳答案
0
不是必须,但是Invoke的效率比直接调用低,所以就事先判断一下了,这是推荐标准而已 如果你这个线程只管10s后消失的话这样很好了,其实我觉得可以开个Timer啊,10秒一次触发,第一次触发就顺便把Timer给Stop就好了嘛,这样的话线程什么的就不用考虑了
Gray Zhang | 专家六级 |园豆:17610 | 2008-08-28 00:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册