Originariamente inviato da Kahm
1)dalla toolbar spingo il pulsante "esporta" dopo la chiamata alla routine,do un messaggio di avviso che è stato tutto esportato, peccato che avendo dei thread mi da prima il messaggio, e solo dopo esporta!!!,come posso far eseguire prima l'esportazione e solo dopo il messaggio?
Non usare un thread separato.
2)nella routine esporta(), chiamo 2 sub che mi esportano, una gli articoli e l'altra le anagrafiche, come posso far eseguire la rotine esportaarticoli(), solo dopo che è stato eseguito esportaAnagrafica()?
Non usare un thread separato.
Se il tuo unico obiettivo è di evitare di bloccare l'interfaccia grafica fai così:
codice:
Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick
Dim t As New System.Threading.Thread(AddressOf Esporta)
        Select Case e.Button.Text
            Case Is = "Esporta"
                t.Start()
            End Select
    End Sub
    Private Sub Esporta()
        If  Me.CHK_Vettore.Checked = True Then
                EsportaAnagrafica()
        End If

        If Me.CHK_Articoli.Checked = True Then
                EsportaArticoli()
        End If
        MsgBox("Aggiornamento eseguito con successo", MsgBoxStyle.Information, "Export")
    end sub
Importantissimo: usa Option Explicit, Option Strict e DICHIARA SEMPRE LE VARIABILI CHE INTENDI USARE; quella variabile "t" che spunta dal nulla nel tuo codice è un'offesa a tutte le norme di buona programmazione e un potenziale bug futuro.
Ulteriori info:
Option Explicit and Option Strict in Visual Basic .NET or in Visual Basic 2005
"Option Strict Off" considered harmful
Coding Horror: Option Strict and Option Explicit in VB.NET 2005


Curiosità che ho notato: da quando i programmatori di VB hanno "scoperto" i thread li usano in tutte le salse, anche quando non solo non servono, ma sono anzi controproducenti.