Ma... imparare ad usare i metodi asincroni è sicuramente una delle cose che danno maggior soddisfazione nella programmazione in C#
Ma molto più importante di fare una cosa lenta in un thread separto, è fare la stessa cosa velocemente, e il thread separato potrebbe non servire più.
Nel tuo caso leggi il file a righe e ogni riga esegui delle operazioni.
invece di usare:
StreamReader LeggiTxt = new StreamReader(percorsoFile);
while (continua)
{
i++;
Linea = LeggiTxt.ReadLine();
lblRigoLetto.Text = Linea;
subLinea = Linea.Split(';');
//--------------
//--------------
Metti in un colpo solo tutto il file in una lista, e poi esegui le operazioni sulla lista, la velocità si incrementerà di migliaia di volte.
per dichiarare una lista di nome TESTOletto:
private List<string> TESTOletto = new List<string>();
per caricare nella lista un file testo in un colpo solo:
TESTOletto = File.ReadAllLines(percorsoFile).ToList(); // legge il file testo
ora puoi lavorare riga per riga il testo che è in ram, ogni riga ha il suo indice, esempio la riga zero: TESTOletto[0];
Hai tutte le proprietà:
TESTOletto.Count() ti dice quante righe hai letto
TESTOletto[20].Contains("ciao") ti dice se la stringa è presente
guardale con l'intellisense, c'è tutto quello che ti serve.
poi con backgroundworker o simili, migliori ulteriormente.
Quello che non si può migliorare è la visualizzazione in un colpo solo di testi grandi in un controllo, tipo RichTextBox o ListBox, perché mentre il controllo carica il testo il form sarà irrimediabilmente bloccato.
In questi casi invece di caricare 500.000 righe di testo nel controllo, si caricano solo le righe effettivamente visualizzate, scorrendo la lista TESTOletto in accordo con una scrollbar, ma questa è un'altra storia.