2

Je cherche dur à WF 4.0 en ce moment, mais je vais avoir du mal à comprendre comment exécuter des flux de travail dans les threads STA. J'ai besoin de construire des documents XPS dans un workflow, ce qui signifie que je dois créer des éléments d'interface utilisateur (FixedPage), ce qui signifie que le thread qui exécute le workflow doit être STA.Workflow 4.0 dans un appartement à un seul thread?

Dans 3.0, vous pourriez faire un peu de magie (je n'ai pas géré cette partie du code, donc pas de détails ici) avec le ManualWorkflowSchedulerService pour que le flux de travail s'exécute dans un thread STA. Mais maintenant, 4.0 est très différent. même bêta 2 est différent de la version bêta 1 ...

Quelqu'un sait comment obtenir des flux de travail en cours d'exécution dans 4.0 threads STA?


Je ne peux pas utiliser le WorkflowInvoker car il est seulement pour les flux de travail de courte durée qui ne nécessitent pas la persistance, ce que je fais.

Répondre

3

Avez-vous essayé d'utiliser le WorkflowInvoker? Cela devrait simplement exécuter le flux de travail sur le thread d'origine et ne pas planifier le travail sur une bande de roulement de fond.

+0

Je viens de voir ça. Mais il bloque également le fil de courant, ce qui est optimal ... – Will

+1

Lorsque vous utilisez le WorkflowApplication vous pouvez définir le SynchronizationContext et prendre le contrôle sur les filets. Par défaut, si le SynchronizationContext n'est pas défini, il utilisera les ports d'achèvement ThreadPool. Mais si vous définissez le WorkflowApplication.SynchronizationContext à SynchronizationContext.Current à dire WPF vos activités seront exécutées sur le thread d'interface utilisateur au lieu du ThreadPool. Le contenu de SynchronizationContext.Current dépend de l'environnement d'exécution ou vous pouvez créer votre propre implémentation si nécessaire. – Maurice

+0

Je vais examiner cela. Je l'ai vérifié avant et je n'ai rien vu concernant la création de threads ou la planification de jobs ... – Will

Questions connexes