Appel à la thread principal à partir d'une Tâche
Que je ne sais pas à propos des threads beaucoup j'ai une question.
Je veux faire quelque chose en arrière-plan et en arrière-plan de la méthode, je veux revenir au thread principal à condition contraire de travail en arrière-plan.
Comment puis-je obtenir cette fonctionnalité? Je suis l'aide d'un appel à StartSyncThread à partir de l'INTERFACE utilisateur de la classe(c#)
async void StartSyncThread()
{
await DoSyncAsync();
}
Task DoSyncAsync()
{
return Task.Run(() => DoSync());
}
dans DoSync méthode, je veux revenir au thread principal pour que je puisse changer l'INTERFACE utilisateur.
Merci de me donner une solution simple pour ce faire. Merci à l'avance!
Découvrez
Control.Invoke(()
ou ce thread: stackoverflow.com/questions/4331262/...
OriginalL'auteur Jatin | 2013-05-25
Vous devez vous connecter pour publier un commentaire.
Du premier démarrage de votre async processus, puis d'appeler l'expéditeur.BeginInvoke pour revenir sur le thread de l'INTERFACE utilisateur.
Noter que le Répartiteur n'est pas statique - cela dépend de votre code étant une partie d'une fonction membre d'un objet d'INTERFACE utilisateur, comme une méthode sur votre page objet.
OriginalL'auteur Deeko
Il ya un couple d'approches.
La première consiste à séparer la méthode synchrone en différentes parties. C'est mieux si votre méthode synchrone calcule les différents types de choses qui se passent dans les différentes parties de l'INTERFACE utilisateur:
La seconde est d'utiliser les rapports sur les progrès. C'est mieux si votre INTERFACE utilisateur des mises à jour sont toutes du même type:
Il existe une dernière solution, mais je vous recommande fortement de l'un des deux ci-dessus. Les deux solutions ci-dessus entraînera une meilleure conception de code (séparation des préoccupations). La troisième alternative est de passer dans un
TaskFactory
qui peut être utilisé pour exécuter du code arbitraire dans le contexte de l'INTERFACE utilisateur:Encore une fois, je ne conseille pas cette dernière solution, car il débordait de votre INTERFACE utilisateur logique de mise à jour avec votre tâche en arrière-plan de la logique. Mais c'est mieux que d'utiliser
Dispatcher
ouControl
directement.OriginalL'auteur Stephen Cleary