Partilhar via


Opções de Criação de Atividades no WF

O .NET Framework 4.6.1 oferece várias opções para criar atividades personalizadas. O método correto a usar para criar uma dada atividade depende das funcionalidades de execução necessárias.

Decidir qual a classe de atividade base a usar para criar atividades personalizadas

A tabela seguinte lista as funcionalidades disponíveis nas classes base de atividades personalizadas.

Classe de atividade base Funcionalidades disponíveis
Activity Compõe grupos de atividades fornecidas pelo sistema e personalizadas numa atividade composta.
CodeActivity Implementa funcionalidades imperativas ao fornecer um Execute método que pode ser sobreposto. Também dá acesso a rastreamento, variáveis e argumentos.
NativeActivity Fornece todas as funcionalidades de CodeActivity, além de abortar a execução de atividades, cancelar a execução de atividades filhos, usar favoritos e agendar atividades, ações de atividade e funções.
DynamicActivity Fornece uma abordagem semelhante a um DOM para construir atividades que interage com o projetista WF e a maquinaria de runtime através ICustomTypeDescriptorde , permitindo a criação de novas atividades sem definir novos tipos.

Criação de Atividades usando Atividade

Atividades que derivam da Activity funcionalidade de composição, reunindo outras atividades existentes. Estas atividades podem ser atividades personalizadas existentes e atividades da biblioteca de atividades .NET Framework 4.6.1. Montar estas atividades é a forma mais básica de criar funcionalidades personalizadas. Esta abordagem é mais frequentemente adotada ao utilizar um ambiente de design visual para criar fluxos de trabalho.

Atividades de autoria usando CodeActivity ou AsyncCodeActivity

Atividades que derivam de CodeActivity ou AsyncCodeActivity podem implementar funcionalidades imperativas ao substituir o Execute método por código imperativo personalizado. O código personalizado é executado quando a atividade é executada pelo tempo de execução. Embora as atividades criadas desta forma tenham acesso a funcionalidades personalizadas, não têm acesso a todas as funcionalidades do runtime, como acesso total ao ambiente de execução, capacidade de agendar atividades filhas, criação de favoritos ou suporte para um método Cancelar ou Abortar. Quando um CodeActivity executa, tem acesso a uma versão reduzida do ambiente de execução (através da CodeActivityContext classe ou).AsyncCodeActivityContext As atividades criadas com CodeActivity eles têm acesso a resolução de argumentos e variáveis, extensões e rastreamento. O agendamento assíncrono de atividades pode ser feito usando AsyncCodeActivity.

Criação de Atividades usando o NativeActivity

Atividades que derivam de NativeActivity, tal como as que derivam de CodeActivity, criam funcionalidades imperativas ao sobrepor Execute, mas também têm acesso a toda a funcionalidade do tempo de execução do fluxo de trabalho através de NativeActivityContext que é passada para o Execute método. Este contexto suporta agendar e cancelar atividades filhos, execução ActivityAction de objetos, ActivityFunc<TResult> integração de transações num fluxo de trabalho, invocação de processos assíncronos, cancelamento e aborto de execução, acesso a propriedades e extensões de execução, e bookmarks (handles para retomar fluxos de trabalho pausados).

Atividades de autoria usando o DynamicActivity

Ao contrário dos outros três tipos de atividade, a nova funcionalidade não é criada derivando novos tipos de DynamicActivity (a classe está selada), mas sim através da montagem de funcionalidades nas Properties propriedades e Implementation usando um modelo de objeto de documento de atividade (DOM).

Atividades de autoria que devolvem um resultado

Muitas atividades têm de devolver um resultado após a sua execução. Embora seja sempre possível definir um costume OutArgument<T> numa atividade para este fim, sugere-se usar em vez disso Activity<TResult>, ou derivar de CodeActivity<TResult> ou NativeActivity<TResult>. Cada uma destas classes base tem um OutArgument<T> Resultado nomeado que a sua atividade pode usar para o seu valor de retorno. Atividades que devolvam um resultado só devem ser usadas se apenas um resultado for necessário de uma atividade; Se for necessário devolver múltiplos resultados, devem ser usados membros separados OutArgument<T> .