none
Processo de Delegar Multiplos RRS feed

  • Pergunta

  • Bom dia.

    Estou tentando criar um processo para Delegar várias ações ao mesmo tempo.

    Essas ações devem executar em paralelo sempre que chamadas, mas todas tem uma coisa em comum, Atualizam um progressbar próprio.

    Exemplo.

    Botão1: Chama a sub Process1

    Botão2: Chama a sub Process2

    Os dois procedimentos deve processar em paralelo sem interferir um com o outro. Cada um deve atualizar sua progressbar.

    Detalhe, a Progressbar só será criada no inicio do procedimento, e será fechada no final.

    Segue o código que estou tentando rodar.

     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

            Dim d As New dAtualizar(AddressOf Process1)
            d.Invoke()

        End Sub

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

            Dim d As New dAtualizar(AddressOf Process2)
            d.Invoke()

        End Sub

        Public Delegate Sub dAtualizar()

        Public Sub Process1()

            ' Cria um ProgressBar
            Dim p As New ProgressBar
            p.Parent = PainelProcs

            For i = 1 To 100

                ' Vai executando e processando. Apenas exemplo para rodar o progressbar
                p.Value += 1
                Application.DoEvents()
                Thread.Sleep(50)

            Next

            p.Dispose()

        End Sub

        Public Sub Process2()

            ' Cria um ProgressBar
            Dim p As New ProgressBar
            p.Parent = PainelProcs

            For i = 1 To 100

                ' Vai executando e processando. Apenas exemplo para rodar o progressbar
                p.Value += 1
                Application.DoEvents()
                Thread.Sleep(50)

            Next

            p.Dispose()

        End Sub

    Obrigado.


    LFBit

    sexta-feira, 23 de novembro de 2012 12:22

Todas as Respostas

  • Qual exatamente o problema?
    domingo, 25 de novembro de 2012 05:02
  • O problema é:

    Ao iniciar o segundo processo, o primeiro fica parado esperando o segundo terminar.

    Eles não rodam em paralelo.

    PS, quando eu digo primeiro o segundo, trata-se da ordem de start, e não de ordem obrigatória de processamento..

    Obrigado.


    LFBit

    segunda-feira, 26 de novembro de 2012 10:53
  • Você não está usando threads para eles executarem em paralelo.

    Todos os seu dois processos na verdade estão executando na thread UI principal. Que no caso roda sequencialmente, então sempre um vai rodar após o outro.

    dim t as New Thread(addressof Process1)

    t.Start()

    segunda-feira, 26 de novembro de 2012 16:36
  • Sim Danimar.. Agradeço, mas na verdade não posso usar esse exemplo que você me passou.

    Pois preciso atualizar um objeto do formulário.

    No exemplo que passei Realmente não funciona, passei para tentar demonstrar o que eu quero fazer e não estou conseguindo.

    Obrigado.


    LFBit

    segunda-feira, 26 de novembro de 2012 17:03
  • Agora você confundiu mais ainda. :)

    Você quer executar duas coisas ao mesmo tempo, e não quer usar threads?

    Ou você apenas quer que o primeiro execute antes do segundo?

    Isso aqui é totalmente inútil:

     Dim d As New dAtualizar(AddressOf Process1)
     d.Invoke()

    Não esta servindo para nada. Chama diretamente

    Process1()

    segunda-feira, 26 de novembro de 2012 18:21
  • Danimar,

    Desmarquei como resposta, pois não foi uma resposta.

    Sim, Eu quero executar duas coisas ao mesmo tempo sem usar Threads.

    Melhor dizendo, posso até usar Thread, isso se for possível que essa thread atualize o formulário.

    Tem como?



    LFBit

    terça-feira, 12 de março de 2013 01:25