Partilhar via


Como: Manipular controles de segmentos

O componente de BackgroundWorker substitui e acrescenta funcionalidade para o método de BeginInvoke ; no entanto, o método de BeginInvoke será retido para compatibilidade com versões anteriores e o uso futuro, se você escolher.Para mais informações, consulte Visão geral sobre o componente BackgroundWorker.

Multithreading é mais adequada para executar procedimentos de processamento intensivo de módulos de classe.Diferentemente de outros componentes, existem problemas com chamar métodos nos controles de segmentos separados.Os métodos que afetam controles devem ser executados somente no thread em que o controle foi criado.Como empacotamento chamadas de um segmento e de enviar através dos limites de thread a outra é muito caro em termos de recursos do sistema, você deve evitar repetidamente fazer chamadas para controles em outros segmentos.O melhor possível, chamadas diretas de outros segmentos são caros, e desempenho de seu aplicativo sofrerá.Em o dos casos, as condições podem ocorrer que causam um deadlock em seu aplicativo, congelar a execução.

Em o entanto, pode haver ocasiões em que você deseja chamar métodos de controles de seus segmentos.Por exemplo, você pode chamar um método que desabilitado um botão ou atualizaria uma exibição em um formulário em resposta a ação tomada por um segmento.O .NET Framework fornece métodos que são seguras de chamar de qualquer segmento para chamar os métodos que interagem com controles possuídos por outros segmentos.O método de Invoke permite a execução dos métodos síncronos em controles, enquanto o método de BeginInvoke assíncrono iniciar a execução.Para usar esses métodos, você deve declarar um delegado com a mesma assinatura do método será chamando.Em seguida você pode chamar o método de Invoke ou de BeginInvoke de qualquer controle no formulário fornecendo o delegado o método que você deseja chamar.Todos os parâmetros necessários estão envolvidos em Object e passado ao método.

Para chamar os métodos que envolvem controles possuídos por outros segmentos

  1. Declare um representante com uma assinatura idêntico ao método que você deseja chamar.

    O exemplo a seguir mostra como declarar um delegado com Integer e parâmetros de String .

    Public Delegate Sub myDelegate(ByVal anInteger as Integer, ByVal _
       aString as String)
    
    public delegate void myDelegate(int anInteger, string aString);
    
  2. Use qualquer controle para chamar os métodos que manipulam os controles possuídos por outros segmentos.

    ObservaçãoObservação

    Os parâmetros (se houver) exigidos pelo método pode ser fornecidos em Object.

    • Se você deseja chamar métodos de forma síncrona, chame método de Control.Invoke.

      Label1.Invoke(New myDelegate(AddressOf myMethod), New _
         Object() {1, "This is the string"})
      
      Label1.Invoke(new myDelegate(myMethod), new Object[] {1,
         "This is the string"});
      
    • Se você deseja chamar métodos de forma assíncrona, chame método de Control.BeginInvoke.

      Label1.BeginInvoke(New myDelegate(AddressOf myMethod), _
         New Object() {1, "This is the string"})
      
      Label1.BeginInvoke(new myDelegate(myMethod), new 
      Object[] {1, "This is the string"});
      

Consulte também

Tarefas

Passo a passo: Criando um componente com simples com Visual Basic

Passo a passo: Criando um componente com simples com o visual C#

Referência

BackgroundWorker

Conceitos

Event-based Asynchronous Pattern Overview

Outros recursos

Multithreading em componentes