关于线程与线程之间访问问题

huangshua 2009-12-04 10:11:21
if (this.InvokeRequired)
{
SetPos sps = new SetPos(SetTextMessage);
this.Invoke(sps, new object[] {pos});

}
else
{
this.lshowNum.Text = pos.ToString() + "/100";
this.progressBar1.Value = Convert.ToInt32(pos);
}
比如上面这段代码,我的理解是:属性InvokeRequired就是表示当前form的空间是否可以被当前线程所访问,如果是就直接访问,不过不是就用委托访问,可上面的代码为什么正好和我的理解相反呢,上面的好像是这样:如果InvokeRequired为true就用委托访问,如果InvokeRequired为false就直接访问。请高手帮我讲解一下。
...全文
112 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈潜伏哥 2009-12-04
  • 打赏
  • 举报
回复
楼主你刚好理解反了。
invokerequired的意思获取是不是需要委托调用,如果为真,就需要,为假就不需要直接访问就行
xuzysun 2009-12-04
  • 打赏
  • 举报
回复
InvokeRequired用于判断该段代码是否是在其他线程中委托调用的,如果为真,就需要在本线程中重新创建一个该委托的实例,并用Invoke方法调用它,让这段代码在本线程中调用。
blueteeth_yl 2009-12-04
  • 打赏
  • 举报
回复
那你换过来试试要是和你理解的一样,那就说明你理解错了嘛,要是不行那就说明这样写不对,Msdn上应该能解决这个问题吧
ztenv 2009-12-04
  • 打赏
  • 举报
回复
InvokeRequired:是否需要调用;
this.InvokeRequired:并不是任何时候都指代的form,而是你的UI部分的控件,调用的控件
holydie 2009-12-04
  • 打赏
  • 举报
回复
哇,正好需要进行线程间访问,感谢上面所有人
Neil198 2009-12-04
  • 打赏
  • 举报
回复
InvokeRequired:获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。

楼主你理解反了
kof_sdu 2009-12-04
  • 打赏
  • 举报
回复
你可能是想从线程内访问控件吧 比如给控件赋值 但是由于控件不是由你的线程创建的
而是由主线程创建的 所以你的赋值不会成功

为了给控件赋值 你需要通过代理

这就是你的控件的InvokeRequired为True了

111,121

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧