日期:2014-05-20  浏览次数:20950 次

invoke方法invokeRequred方法,这些在C#里是可以使用的,...........
invoke方法invokeRequred方法,这些在C#里是可以使用的,在MSdN里的解释都是什么句柄啊,Inptr指针啊之类的,难道我学C#做事必须要了解C++的内容吗?
比如:InvokeRequired   在什么时候返回False等等...我没有学过C++,Msdn的解释所以就不明白了.
关于要理解这两个方法,我要具备的知识有那些啊???
这两个方法,.Net类库有没有代替它的吗??/

------解决方案--------------------
多少学一点C++有好处。。

------解决方案--------------------
public bool InvokeRequired { get; }
System.Windows.Forms.Control 的成员

摘要:
获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。

返回值:
如果控件的 System.Windows.Forms.Control.Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false。
------解决方案--------------------
一般用到线程时候,需要改变控件的属性..等,才用的


public void abc(string e)
{
if(控件名.InvokeRequired)
{
Invoke(new 委托(abc),new object[]{e});
}
else
{
改变控件属性等...
}
}


}
------解决方案--------------------
在多线程操作控件的情况下,如果当前线程不是创建控件的线程,如果要更改控件的属性,就必须调用Invoke方法,此时,invokeRequred应该返回true;
Invoke方法需要传递一个委托实例,比如要对ListView控件在另外线程上添加一项的话,就必须调用Invoke方法
delegate void AddItem(ListViewItem item);
event AddItem OnAddItem;
this.OnAddItem+=new AddItem(this_OnAddItem);
void this_OnAddItem(ListViewItem item)
{
listView1.Items.Add(item);
}
//添加项
listView1.Invoke(OnAddItem,new object[]{new ListViewItem( " ")});