Bonjour,

Développant en .Net 4.0 j'en profite pour tester les nouvelles classes et remplacer l'utilisation de la classe Thread par la classe Task. Je me confronte tout de même a un petit soucis technique, la synchronisation par rapport a la "Task" de WPF.

J'ai une fonction qui notifie la réception d'un nouveau fichier et qui envoi le résultat dans ma vue WPF :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 private void NewFileReceived(string path)
{
            ThreadPool.QueueUserWorkItem(s =>
            {
                ICAD_RxxMessage doc = this.DocumentConvertion(s as string);
                if (doc != null)
                {
                    //Return to principal thread    
                  App.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background,
                     new Action(() =>
                              {
                                  OnDocumentNF399Receiving(doc);
                              }
                     ));
                }
            }, path)
}
Le délégué OnDocumentNF399Receiving envoi le résultat ensuite dans ma vue WPF.
Et je voudrais le remplacer par un code de ce genre la :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
private void NewFileReceived(string path)
{
         Task<ICAD_RxxMessage> result = Task.Factory.StartNew<ICAD_RxxMessage>(s =>
                       {
                           ICAD_RxxMessage doc = this.DocumentConvertion(s as string);                          
                           return doc;
 
                       }, path,TaskCreationOptions.PreferFairness);
                result.ContinueWith((task) =>
                {
                    if (result.Result != null)
                    {
                        OnDocumentNF399Receiving(result.Result);
                    }
                } );
}


Une exception est remonte car le contexte de synchronisation n'est pas le même.
Suis je oblige de demande à ma vue son contexte à travers un accesseur qui me renverrais le resultat de TaskScheduler.FromCurrentSynchronizationContext(), ou y a t'il un moyen simple ou une "bidouille" tel qu'il existe pour les Thread avec l'utilisation du Dispatcher ?

Merci d'avance.