Grazie mille! Funziona!
Ho sistemato il codice e risolto così:
codice:
private void Main_Load(object sender, EventArgs e)
{
work();
}
private void work()
{
BackgroundWorker bgw = new BackgroundWorker();
//Lavoro da fare nel thread secondario
bgw.DoWork += (s, e) =>
{
aggiorna();
};
//Operazioni da fare non appena si ritorna al thread principale.
//Qui sei nel 3d principale, puoi tornare a toccare gli elementi grafici, per esempio...
bgw.RunWorkerCompleted += (s, e) =>
{
finalcheck(); //scarica aggiornamenti se necessario
//Main.Close();
};
//Operazioni da fare subito prima di eseguire le operazioni in multithreading
//Formloading.ShowDialog();
//Eseguo il bgw.
bgw.RunWorkerAsync();
}