Originariamente inviato da GliderKite
L'ho provata , sia quando l'avevo pensata per il mio progetto reale, sia quando ho creato un progetto di test che ora ti posto:

codice:
Imports System.Threading


Class MainWindow


    Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click

        Dim t As New Thread(AddressOf Me.CreateObj)
        t.SetApartmentState(ApartmentState.STA)
        t.Start()

    End Sub


    Private Sub CreateObj()

        Dim rect As Rectangle

        For i = 0 To 50000
            Thread.Sleep(1)
            rect = New Rectangle With {.Height = 200, .Width = 300, .Fill = New SolidColorBrush(Colors.Green)}
            Dispatcher.BeginInvoke(Sub() Me.TheGrid.Children.Add(rect))
        Next

    End Sub


End Class
E l'eccezione avviene dopo un po di giri nel ciclo...

In ogni caso grazie per la disponibilità, appena posso provo la tua ultima risposta e ti faccio sapere
Faccio notare che se non modifico l'appartment state in STA si verifica un'eccezione quando creo il rettangolo.
certo che così ti da problemi , devi creare il Rectangle nel Dispatcher...

codice:
Dispatcher.BeginInvoke(Sub() Me.grid.Children.Add(New Rectangle With {.Height = 200, .Width = 300, .Fill = New SolidColorBrush(Colors.Green)}))
comunque usa l'ultimo metodo che ti ho postato, è molto meglio