Jeśli nie jesteś jeszcze przekonany do zadania w tle, po prostu spróbuj uzyskać dostęp do elementu GUI z poziomu zadania, takiego jak:
public async Task<int> ProcessStuff_Async()
{
while(true)
{
label1.Text = "processing next item";
aby uzyskać wyjątek czasu wykonywania:
Niepoprawna operacja między wątkami: kontrolka „label1” uzyskała dostęp z wątku innego niż wątek, w którym została utworzona.
tak jak w przypadku starych dobrych, zwykłych wątków w tle.
W dokumentach MSDN (od 2017 :-) znajdują się informacje, np .:
Najlepszym sposobem, aby sobie z tym poradzić ... jest uruchomienie wątku w tle, który wykonuje pracę za pomocą Task.Run i czekanie na wynik. Dzięki temu interfejs użytkownika będzie działał płynnie podczas wykonywania pracy.
Ten dokument ma nawet sekcję What happens under the covers
.