Ich bin neu in der C # -Entwicklung und möchte eine reaktionsschnellere Benutzeroberfläche erstellen. In meinen vorläufigen Recherchen habe ich zwei Methoden gesehen, um dies zu erreichen:
- Multithreading in Verbindung mit der BackgroundWorker-Klasse.
- Die neueren Async / Await-Modifikatoren.
Bedeutet neueres besser? Was ist der Unterschied zwischen den beiden Methoden? Wie wähle ich die Methode aus, mit der ich ein neues Projekt erstellen möchte?
EDIT: Vielleicht sollte ich angeben. Ich erstelle eine Windows Forms-Anwendung, in der alle erforderlichen Daten auf der lokalen Festplatte gespeichert / geladen werden. Ich werde auch mit mehreren USB-Geräten kommunizieren.
c#
.net
multithreading
async
robert.ecot
quelle
quelle
Antworten:
Sie können Ihre Aufgabe mit ausführen
BackgroundWorker
. Es ist eine bekannte Klasse und viele Leute haben sie benutzt.Das neue C # 5
async
und dieawait
Schlüsselwörter vereinfachen im Grunde nur das Schreiben von lesbarem asynchronem Code. Es gibt möglicherweise weniger Tutorials und Beispiele, wie Sie mit diesen Schlüsselwörtern verschiedene Aufgaben ausführen können, alsBackgroundWorker
.Sofern Sie keine ältere Version von C # benötigen, empfehle ich Ihnen, sich mit
async
und vertraut zu machenawait
.quelle
Mit den Schlüsselwörtern
async
undawait
wird Ihre Anwendung nicht selbst reaktionsschneller. Sie vereinfachen einfach den Aufruf und die Handhabung von Methoden, dieTask
Objekte zurückgeben. Um Hintergrund-Threads zu erstellenasync
/await
tatsächlich zu verwenden, müssen Sie die Verwendung von Dingen kombinieren wie:Task.Start()
- Startet eine bestimmte Aufgabe mit der TasteTaskScheduler
.TaskCompletionSource
- Eine benutzerdefinierte Methode zur Bearbeitung von asynchronen Aufgaben. Ein Ort, an dem ich dies benutzte, war das Behandeln von Ereignissen, die von einerWebBrowser
Steuerung kamen.async
Methoden, wie z. B. viele der Funktionen in der Win 8-API.Mit anderen Worten,
async
/await
ist eine Erweiterung des aufgabenbasierten asynchronen Musters . Sie können eine große Vielzahl von Informationen, darunter auch viele Proben, finden hier .Hierbei
BackgroundWorker
handelt es sich um eine WinForms-Komponente, die einen Hintergrundthread mithilfe des ereignisbasierten asynchronen Musters erstellt , und Sie können die in diesem Hintergrundthread durchgeführten Arbeiten mit Ihrem eigenen Code imDoWork
Ereignishandler auffüllen. Im Allgemeinen empfiehlt Microsoft die Verwendung dieses Musters nicht mehr (siehe unten auf der Seite hier ). Wenn Sie jedoch bereits mit dem Muster vertraut sind, ist es möglicherweise immer noch eine einfache Option.Eine weitere nicht erwähnte Option sind die Reactive Extensions für .NET . Dies ist ein weiteres großartiges Framework, um Ihren Apps mehr Reaktionsfähigkeit zu verleihen.
quelle
BackgroundWorker
ausdrücklich dagegen geraten wird.Ich würde sagen, dass
async
-await
ist viel flexibler alsBackgroundWorker
. Und wenn Sie wollen , etwas zu tun , dass paßtBackgroundWorker
, Sie tun können , es mitasync
-await
auch mit lesbarem und typsichere Code.Aus diesem Grund denke ich , sollten Sie mit bevorzugen
async
-await
überBackgroundWorker
.quelle