Select the product you need help with
A chamar assincronamente um método do Visual C#Artigo: 315582 - Ver produtos para os quais este artigo se aplica. Nesta páginaSumárioO Microsoft .NET Framework torna mais fácil chamar funções assincronamente. Chamar funções de forma assíncrona faz com que o sistema a executar em segundo plano num thread secundário enquanto a função chamada continua a executar qualquer outro trabalho. Numa chamada função (síncrona) normal, a função é executada imediatamente no mesmo thread que efectuou a chamada. A função chamada aguarda que a chamada para concluir e recebe os resultados da chamada antes de continuar. Por outro lado, quando fizer uma chamada assíncrona, obter os resultados da chamada assíncrona mais tarde. Este artigo demonstra como efectuar este procedimento utilizando o Visual C#. RequisitosA lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs são necessários:
Como efectuar chamadas assíncronasSão efectuadas chamadas assíncronas utilizando delegados. Um delegado é um objecto que molda-se uma função. Os delegados fornecem uma função síncrona e também fornecerem métodos para chamar a função moldada assincronamente. Esses métodos são BeginInvoke() e EndInvoke() . As listas de parâmetro destes métodos variam consoante a assinatura da função que o delegado é moldado. Tenha em atenção que o Visual Studio .NET IntelliSense funcionalidade não apresenta BeginInvoke() e EndInvoke() , para que vê-los aparecer no não a função de lista à medida que escreve.BeginInvoke() é utilizado para iniciar a chamada assíncrona. Tem os mesmos parâmetros como a função moldado além dois parâmetros adicionais que irão ser descritos neste artigo. BeginInvoke() devolve imediatamente e não aguarda que a chamada assíncrona para concluir. BeginInvoke() devolve um objecto IAsyncResult . A função EndInvoke() é utilizada para obter os resultados da chamada assíncrona. Pode ser chamado em qualquer altura após BeginInvoke() . Se a chamada assíncrona não concluiu ainda, EndInvoke() blocos até que termine. Os parâmetros de função EndInvoke() inclui a out e parâmetros de ref com a função moldada e o objecto IAsyncResult devolvido pelo BeginInvoke() . Segue-se um exemplo de um delegado e respectivos métodos BeginInvoke() e EndInvoke() :
O primeiro passo consiste em definir o delegado molda-se a função: Exemplo 1: Um método de chamada síncronaEste exemplo demonstra como chamada síncrona LongRunningMethod() utilizando um delegado MethodDelegate . Os exemplos contrastam este efectuar chamadas de forma assíncrona.
Exemplo 2: Chamada um método de forma assíncrona utilizando o padrão de EndInvoke() chamadaNesta secção, o exemplo invoca o mesmo método de modo assíncrono. O padrão de chamada que é utilizado é chamar BeginInvoke , efectue algumas trabalhar no thread principal e, em seguida, chamar EndInvoke() . Tenha em atenção que EndInvoke() não devolve até que a chamada assíncrona foi concluída. Este padrão de chamada é útil quando pretende que o thread de chamada funcionam ao mesmo tempo que a chamada assíncrona está em execução. Ter trabalho ocorrer ao mesmo tempo, pode melhorar o desempenho de muitas aplicações. Tarefas comuns para serem executadas assincronamente desta forma são operações de ficheiro ou na rede.
Exemplo 3: Chamada de método de forma assíncrona e utilizar um WaitHandle para aguardar a chamada para concluirNesta secção, o exemplo chama o método de forma assíncrona e aguarda um WaitHandle antes de que chama EndInvoke() . O IAsyncResult devolvido pelo BeginInvoke() tem uma propriedade AsyncWaitHandle . Esta propriedade devolve um WaitHandle é assinalado quando concluir a chamada assíncrona. A aguardar um WaitHandle é uma comuns técnica de sincronização do thread. O thread chamado aguarda no WaitHandle utilizando o método WaitOne() de WaitHandle . blocos de WaitOne() até WaitHandle é assinalado. Quando devolve WaitOne() , pode efectuar algum trabalho adicional antes de telefonar EndInvoke() . Como no exemplo anterior, esta técnica é útil para executar operações de ficheiro ou de rede que caso contrário, bloquearia o thread principal chamado.
Exemplo 4: Chamada de método de forma assíncrona utilizando o padrão de chamada de consultaNesta secção, o exemplo de consulta o objecto IAsyncResult para saber quando tiver concluído a chamada assíncrona. O objecto IAsyncResult devolvido pelo BeginInvoke() tem uma propriedade IsCompleted que devolve true depois de concluir a chamada assíncrona. Em seguida, é possível chamar EndInvoke() . Este padrão de chamada é útil se a aplicação funciona em curso pretende ter bloqueado por uma chamada de função de execução longa. Uma aplicação do Microsoft Windows é um exemplo desta situação. O thread principal da aplicação Windows pode continuar a processar a intervenção do utilizador enquanto executa uma chamada assíncrona. Pode verificar periodicamente IsCompleted para ver se a chamada foi concluída. Chama EndInvoke quando IsCompleted devolve Verdadeiro . Porque EndInvoke() bloqueia até a operação assíncrona está concluída, a aplicação não chama-lo até que seja conhecido que a operação foi concluída.
Exemplo 5: Executar uma chamada de retorno quando conclui um método assíncronoNesta secção, o exemplo fornece um delegado de chamada de retorno para a função BeginInvoke() que o sistema executa quando concluir a chamada assíncrona. A chamada de retorno chama EndInvoke() e processa os resultados da chamada assíncrona. Este padrão de chamada é útil se o thread que inicia a chamada assíncrona não é necessário processar os resultados da chamada. O sistema invoca a chamada de retorno num thread diferente do thread emitiu quando concluir a chamada assíncrona.Para utilizar este padrão de chamada, tem de passar um delegado do tipo AsyncCallback como segundo ao último parâmetro da função BeginInvoke() . BeginInvoke() também tem um parâmetro final de escrever o objecto no qual pode passar qualquer objecto. Este objecto está disponível para a função de chamada de retorno quando é invocada. Uma utilização importante para este parâmetro deve passar o delegado é utilizado para iniciar a chamada. A função de chamada de retorno, em seguida, pode utilizar a função EndInvoke() desse delegado para concluir a chamada. Este padrão de chamada é demonstrado abaixo.
PropriedadesArtigo: 315582 - Última revisão: segunda-feira, 11 de Dezembro de 2006 - Revisão: 4.3 A informação contida neste artigo aplica-se a:
Tradução automática IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 315582
(http://support.microsoft.com/kb/315582/en-us/
)
| Traduções de Artigos
|




Voltar ao topo








