Je suis nouveau dans le développement C # et souhaite créer une interface utilisateur plus réactive. Dans mes recherches préliminaires, j'ai vu deux méthodes pour y parvenir:
Est-ce que plus récent signifie mieux? Quelle est la différence entre les deux méthodes? Si je souhaite créer un nouveau projet, comment choisir la méthode à suivre?
EDIT: Je devrais peut-être préciser. Je crée une application Windows Forms, où toutes les données nécessaires seront enregistrées/chargées sur le disque local. Je communiquerai également avec plusieurs périphériques USB.
Vous pourrez accomplir votre tâche en utilisant BackgroundWorker
. C'est une classe bien connue et beaucoup de gens l'ont utilisée.
Les nouveaux mots clés C # 5 async
et await
facilitent essentiellement l'écriture de code asynchrone lisible. Il peut y avoir moins de didacticiels et d'exemples sur la façon d'accomplir diverses tâches avec ces mots clés plutôt que BackgroundWorker
.
À moins que vous n'ayez besoin d'utiliser une ancienne version de C #, je suggère d'apprendre à utiliser async
et await
.
Les mots clés async
et await
ne rendront pas votre application plus sensible à eux seuls. Ils facilitent simplement l'appel et la gestion des méthodes qui renvoient des objets Task
. Pour que async
/await
utilise réellement des threads d'arrière-plan, vous devrez combiner avec l'utilisation de choses comme:
Task.Start()
- Démarre une tâche donnée en utilisant TaskScheduler
.TaskCompletionSource
- Une façon personnalisée de gérer les tâches asynchrones. Un endroit où je l'ai utilisé était de gérer les événements provenant d'un contrôle WebBrowser
.async
, telles que la plupart des fonctions de l'API Win 8.En d'autres termes, async
/await
est une extension du modèle asynchrone basé sur les tâches. Vous pouvez trouver un grand nombre d'informations, y compris de nombreux exemples, ici .
BackgroundWorker
est un composant WinForms qui crée 1 thread d'arrière-plan à l'aide du modèle asynchrone basé sur les événements , et vous pouvez remplir le travail effectué sur ce thread d'arrière-plan avec votre propre code dans le DoWork
gestionnaire d'événements. En général, Microsoft ne recommande plus d'utiliser ce modèle (voir le bas de la page ici ), bien que si vous êtes familier avec elle déjà, cela peut encore être une option simple.
Une autre option non mentionnée est le Reactive Extensions for .NET . Ceci est un autre excellent cadre pour ajouter de la réactivité à vos applications.
Je dirais que async
-await
est beaucoup plus flexible que BackgroundWorker
. Et si vous voulez faire quelque chose qui correspond à BackgroundWorker
, vous pouvez le faire avec async
-await
aussi, avec un code plus lisible et plus sûr pour le type.
Pour cette raison, je pense que vous devriez préférer utiliser async
-await
plutôt que BackgroundWorker
.