如下`代码中运行起来好像不响应,主要不弹出带“ok”内容的消息框 ,也不会传输数据。
这是因为,IEnumerable接口找不到了实例对象导致的。
只有对IEnumerable对象引用实例对象迭代器才有效。
好了,继续解决如下程序问题。
如下程序是多线程模式下运行。所以,必须留下中间一个函数。这是必要的。
如下中间函数MyFunc2过程里处理IEnumerble接口的实例引用。
这样保证迭代器有效执行。
迭代器是IEnumerable接口的附属物,只有返回类型为IEnumerable对象上使用。
也可以lambda表达式中使用,注意的是只能Function上执行。
好了,继续处理问题。
插入代码处理如下;
PrivateFunction
MyFunc2()
As
IEnumerable(Of
Integer
)
Dim
Func1
As
New
Func(OfIEnumerable(Of
Integer
))(
AddressOf
Me
.MyFunc1)
Dim List1 As New List(Of Integer)(Func1.Invoke)
Return
List1.AsEnumerable
End
Function
如上这样已经处理完成了。
或者 MySub过程里实例引用处理;
Dim List1 As New List(Of Integer)(Task1.Result)这样也可以执行。
处理前的代码;
Public
Class
Class1
Sub
MySub()
Dim
Task1
As
New
Task(OfIEnumerable(Of
Integer
))(
AddressOf
Me
.MyFunc2)
Task1.Start()
Task1.Wait()
End
Sub
Private
Iterator
Function
MyFunc1()
As
IEnumerable(Of
Integer
)
Yield5
End
Function
Private
Function
MyFunc2()
As
IEnumerable(Of
Integer
)
Dim
Func1
As
New
Func(OfIEnumerable(Of
Integer
))(
AddressOf
Me
.MyFunc1)
Return
Func1.Invoke
End
Function
End
Class
Public
Class
Form1
Private
Sub
Button1_Click(sender
As
Object
,e
As
EventArgs)
Handles
Button1.Click
Dim
Cla1
As
New
Class1
Cla1.MySub()
End
Sub
End
Class
处理后的代码如下;
Public
Class
Class1
Sub
MySub()
Dim
Task1
As
New
Task(OfIEnumerable(Of
Integer
))(
AddressOf
Me
.MyFunc2)
Task1.Start()
Task1.Wait()
End
Sub
Private
Iterator
Function
MyFunc1()
As
IEnumerable(Of
Integer
)
Yield5
End
Function
PrivateFunction
MyFunc2()
As
IEnumerable(Of
Integer
)
Dim
Func1
As
New
Func(OfIEnumerable(Of
Integer
))(
AddressOf
Me
.MyFunc1)
Dim List1 As New List(Of Integer)(Func1.Invoke)
Return
List1.AsEnumerable
End
Function
End
Class
Public
Class
Form1
Private
Sub
Button1_Click(sender
As
Object
,e
As
EventArgs)
Handles
Button1.Click
Dim
Cla1
As
New
Class1
Cla1.MySub()
End
Sub
End
Class