Wenn Sie noch nicht von einer Hintergrundaufgabe überzeugt sind, versuchen Sie einfach, innerhalb einer Aufgabe wie folgt auf ein GUI-Element zuzugreifen:
public async Task<int> ProcessStuff_Async()
{
while(true)
{
label1.Text = "processing next item";
um die Laufzeitausnahme zu erhalten:
Threadübergreifende Operation ungültig: Steuern Sie 'label1', auf das von einem anderen Thread als dem Thread zugegriffen wird, für den es erstellt wurde.
genau wie bei den guten alten regulären Hintergrund-Threads.
Es gibt Informationen in MSDN-Dokumenten (Stand 2017 :-), zB:
Der beste Weg, um damit umzugehen ... besteht darin, einen Hintergrund-Thread zu starten, der die Arbeit mit Task.Run erledigt , und auf sein Ergebnis zu warten . Dadurch fühlt sich die Benutzeroberfläche während der Arbeit reibungslos an.
Dieses Dokument enthält sogar einen Abschnitt What happens under the covers.