Comment doit-je mettre à jour de la Tâche de le Thread d'INTERFACE utilisateur?
J'ai une tâche que l'exécution de certains travaux lourds.
J'ai besoin de chemin c'est suite à LogContent
Task<Tuple<SupportedComunicationFormats, List<Tuple<TimeSpan, string>>>>.Factory
.StartNew(() => DoWork(dlg.FileName))
.ContinueWith(obj => LogContent = obj.Result);
C'est le bien:
public Tuple<SupportedComunicationFormats, List<Tuple<TimeSpan, string>>> LogContent
{
get { return _logContent; }
private set
{
_logContent = value;
if (_logContent != null)
{
string entry = string.Format("Recognized {0} log file",_logContent.Item1);
_traceEntryQueue.AddEntry(Origin.Internal, entry);
}
}
}
Problème est que _traceEntryQueue
est lié aux données de l'INTERFACE utilisateur, et de cause je vais d'exception sur le code comme ceci.
Donc, ma question est de savoir comment le faire fonctionner correctement?
Quel genre de l'INTERFACE utilisateur, utilisez-vous? WPF, Windows Forms, Silverlight, Web?
wpf
veuillez voir ma réponse.
wpf
veuillez voir ma réponse.
OriginalL'auteur Night Walker | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour exécuter le ContinueWith -tâche sur le thread d'INTERFACE utilisateur. Ceci peut être accompli à l'aide de la TaskScheduler de la thread de l'INTERFACE utilisateur avec le version surchargée de la ContinueWith -méthode, c'est à dire.
OriginalL'auteur bobblez
Voici un bon article: La Programmation parallèle: la Tâche des Planificateurs et Contexte de Synchronisation.
Prendre un coup d'oeil à De la tâche.ContinueWith() la méthode.
Exemple:
Depuis .NET 4.5 prend en charge
async
/await
mots-clés (voir aussi De la tâche.Run vs Tâche.Usine.StartNew):OriginalL'auteur Sergey Brunov
Vous pouvez utiliser le
Dispatcher
au code d'appel sur le thread de l'INTERFACE utilisateur. Jetez un oeil à l'article Travailler Avec Le Répartiteur WPFOriginalL'auteur RePierre
Si vous utilisez async/await, alors voici un exemple de code qui montre comment planifier l'exécution d'une tâche sur le thread GUI. Placez ce code au bas de la pile de l'ensemble de vos async/await appels pour éviter les temps d'exécution de WPF jeter des erreurs avec le code d'exécution sur le thread GUI.
Fonctionne avec WPF + MVVM, testé sous VS 2013.
Mot d'avertissement -
Task.Run
est un poids lourd de l'opération, il crée un nouveau thread et englouti beaucoup d'espace de pile. À utiliser avec parcimonie.OriginalL'auteur Contango