日期:2014-05-17  浏览次数:21011 次

关于Invoke用法
InvokeRequired和Invoke的区别是什么,代表什么意思啊?下面是代码:

delegate void ShwMsgforViewforCallBack(ListBox listbox,string text);
private void ShwMsgforView(ListBox listbox,string text)
{
if(listbox.InvokeRequered)
{
ShwMsgforViewforCallBack shwMsgforViewCallBack=ShwMsgforView;
listbox.Invoke(shwMsgforViewCallBack,new object[]{listbox,text});
}
else
{
listbox.Items.Add(text);
listbox.SelectIndex=listbox.Item.Count-1;
listbox.ClearSelected();
}
}

这是一个显示消息的委托。想请教一下,什么时候执行if和else语句呢。
delegate Invoke

------解决方案--------------------
至少它们的返回值就不一样。
------解决方案--------------------
这个查看MSDN就自然明白了,要学会自己解决问题.http://msdn.microsoft.com/zh-cn/library/vstudio/system.windows.forms.control.invokerequired.aspx
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.invoke(v=VS.80).aspx
------解决方案--------------------
InvokeRequired就是获取一个布尔值,指示当前线程与控件的线程是否在不同线程。
不同线程就需要使用控件的Invoke方法去执行。
因为安全问题,.net不允许跨线程访问控件。因此需要使用Invoke,让控件自身的线程去执行方法。
------解决方案--------------------
引用:
Quote: 引用:

InvokeRequired就是获取一个布尔值,指示当前线程与控件的线程是否在不同线程。
不同线程就需要使用控件的Invoke方法去执行。
因为安全问题,.net不允许跨线程访问控件。因此需要使用Invoke,让控件自身的线程去执行方法。
那如果返回的是true,执行过程是怎样的。小弟刚学的委托,麻烦一步步说详细点,谢谢啦。


如果InvokeRequired返回true,则表明需要使用Invoke,对于你1楼的代码,就是要执行else上面的那两行。
------解决方案--------------------
引用:
哪个是返回值。返回的是什么类型啊。

一个是bool,另一个是void。
------解决方案--------------------
引用:
Quote: 引用:

InvokeRequired就是获取一个布尔值,指示当前线程与控件的线程是否在不同线程。
不同线程就需要使用控件的Invoke方法去执行。
因为安全问题,.net不允许跨线程访问控件。因此需要使用Invoke,让控件自身的线程去执行方法。
那如果返回的是true,执行过程是怎样的。小弟刚学的委托,麻烦一步步说详细点,谢谢啦。