首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

小疑点,解决后立刻结帖:窗体Hide情况下不能跨线程响应UI更改

2012-02-15 
小问题,解决后立刻结帖:窗体Hide情况下不能跨线程响应UI更改关于跨线程更改UI的控件文本,MSDN2005给出了使

小问题,解决后立刻结帖:窗体Hide情况下不能跨线程响应UI更改
关于跨线程更改UI的控件文本,MSDN2005给出了使用delegate   void   SetTextCallback(string   text)和SetText函数的例子,但是我发现如果在窗体Load时,将窗体隐藏this.Hide();后,SetText函数有时无法被调用,而有时又可以,请高手指教这是怎么回事,谢谢。

[解决办法]
up
[解决办法]
多线程中是不允许在线程中给UI控件付值得,要修改UI空间需要使用代理
比如要对txtWord控件付值,首先定义代理:
private delegate void deleThread(string word);
在线程中写:
this.txtWord.BeginInvoke(new deleThread(SetTxt), word.Trim());

然后定义一个委托方法来付值
private void SetTxt(string word)
{
this.txtWord.Text = word.Trim();
}
[解决办法]
加了断点要按F5继续执行阿 否则线程肯定挂起了。另外如果用隐藏有问题 你可以试试通过设置窗口的Top属性来达到隐藏的效果,把Top设置为-1000就会隐藏了
[解决办法]
参见MSDN2005的Control.InvokeRequired 属性,“注意”栏:如果应当处理消息的线程不再处于活动状态,则可能会引发异常。另外,如果尚未创建控件的句柄,您就不能简单地在控件上调用属性、方法或事件。这可能导致在后台线程上创建控件的句柄,从而隔离不带消息泵的线程上的控件并使应用程序不稳定。
猜想可能是由于窗体不可见后,处理消息的UI线程未处于Running状态引起的不稳定。

热点排行