Questa è difficile

Dunque, sto cercando, e con non poche difficoltà, di passare ad un Thread il riferimento ad un oggetto Windows.Form, nello specifico una Label.

L'idea è questa, il Thread è uno ed asincrono, senza bloccare l'applicazione devo attendere un determinato tempo prima di avviare una certa funzione, quindi ho pensato, per coinciare, di provare a modificare in maniera asincrona il testo di una Label.

codice:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Prova_Thread pt = new Prova_Thread(ref this.label1);
            Thread th = new Thread(pt.Esegui);
            th.Start();
            while (!th.IsAlive) ;
            th.Join();
        }
    }

    public class Prova_Thread
    {
        private volatile Label _Lbl;
        private int _Conta;
        public Prova_Thread(ref Label Lbl)
        {
            this._Lbl = Lbl;
            this._Conta = 5;
        }

        public void Esegui()
        {
            while (this._Conta > 0)
            {
                this._Lbl.Text = this._Conta.ToString();
                this._Conta--;
            }
        }
    }
Come vedete al Click di button1 creao un Thread, al quale passo per riferimento la label1, successivamente avvio il Thread.

Internamente il Thread funziona bene finché non arriva all'istruzione this._Lbl.Text = this._Conta.ToString();

Quì s'incarta.

Ho già tentato in passato con oggetti come array o simili e mi è andata bene, ma questa è la prima volta che provo con oggetti strutturati come una Label.

Avete suggerimenti?

Grazie