ti rispondo in ordine.

1) il meotdo .join() aspetta che il thread finisca, quindi se chiamato lì ti fermerà l'applicazione in attesa che il thread finisca...in pratica è come non usare i thread.

Se devi evitare di entrare nell'IF successivo, non pui metterci semplicemente un return?

2)Esiste un evento legato alla form che si chiama FormClosing.
Il metodo che legherai a questo evento dovrà contenere le istruzioni per chiudere il thread: ad esempio thread.Abort(); (non sono sicuro che sia questa l'esatto nome del metodo, ma sicuramente qualcosa di simile)

Ciao