per alcune funzioni occorre eseguire il codice in un Threading separato
prima di procedere con questo sistema cercare una eventuale soluzione con invoke

da aggiungere namespace:
using System.Threading;

sintassi:
public void METODO() metodo da eseguire Threading
{

......
}

[ObsoleteAttribute("The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false)]toglie l'avviso che il comando é obsoleto
private void ATTIVA() metodo che attiva il Threading
{
Thread threadoggetto = new Thread(new ThreadStart(METODO)); oggetto Threading
threadoggetto.ApartmentState = ApartmentState.STA;
threadoggetto.Start(); attiva il processo in Threading
threadoggetto.Join(); se vuoi bloccare il metodo in attesa che finisca il processo in Threading, altrimenti proseguirebbe
}



esempio: apro finestra di dialogo seleziona Directory in Threading
public void SelecionaDirectory() metodo che visualizza la finestra di sialogo
{

DialogResult result = folderBrowserDial.ShowDialog();

if (result == DialogResult.OK)
{
Properties.Settings.Default.settaggio = folderBrowserDial.SelectedPath;
Properties.Settings.Default.Save();
}
}

[ObsoleteAttribute("The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false)]toglie l'avviso che il comando é obsoleto
private void btnDirOrigine_Click(object sender, EventArgs e) metodo che attiva il Threading
{
Thread threadGetDirectory = new Thread(new ThreadStart(SelecionaDirectory));
threadGetDirectory.ApartmentState = ApartmentState.STA;
threadGetDirectory.Start();
threadGetDirectory.Join(); metodo che attiva il Threading
lblDirectory.Text = Properties.Settings.Default.settaggio;; aggiorno etichetta
}