You may have heard of VB11, currently in the VS11 developer preview. It adds two main syntax elements - Iterator functions and Async methods. I don't know much about Async methods yet, but here's a quick Iterator tutorial.

Basically, you put the Iterator keyword before the Function keyword and it becomes an iterator and returns an IEnumerable(Of t). Then, you have some kind of loop, and use the new Yield keyword to "return" a value. For example, this method generates lines from an array of points:

Code:
    ''' <summary>
    ''' Represents a line.
    ''' </summary>
    Private Structure Line
        Public Start As Point
        Public [End] As Point

        Public Function IsVertical() As Boolean
            Return Me.Start.X = Me.End.X
        End Function

        Public Function IsHorizontal() As Boolean
            Return Me.Start.Y = Me.End.Y
        End Function

        Public Function IsEmpty() As Boolean
            Return Me.IsHorizontal() AndAlso Me.IsVertical()
        End Function

        Public Shared Operator =(ByVal a As Line, ByVal b As Line) As Boolean
            Return a.Start = b.Start AndAlso a.End = b.End
        End Operator

        Public Shared Operator <>(ByVal a As Line, ByVal b As Line) As Boolean
            Return a.Start <> b.Start OrElse a.End <> b.End
        End Operator
    End Structure

    ''' <summary>
    ''' Gets the lines between each point.
    ''' </summary>
    ''' <param name="points">The points for which to create lines.</param>
    Private Shared Iterator Function Lines(ByVal points As IEnumerable(Of Point)) As IEnumerable(Of Line)
        Dim last As Point?

        For Each p As Point In points
            If last IsNot Nothing Then Yield New Line With {
                .Start = last.Value,
                .End = p
            }

            last = p
        Next
    End Function
Here's how you might use it:

Code:
' Draw a square in a *very* roundabout way :)
' By the way, you can omit types in For Each statements in VB 11:
'          v
For Each line In Lines({
            Point.Empty,
            New Point(100, 0),
            New Point(100, 100),
            New Point(0, 100),
            Point.Empty
        })
    myGraphics.DrawLine(Pens.Red, line.Start, line.End)
Next
Use iterators well - they can be really great sometimes.