Inquiridor
Processo de Delegar Multiplos

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 SubObrigado.
LFBit
Todas as Respostas
-
-
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
-
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()
-
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
-
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()
- Marcado como Resposta Ricardo RussoModerator segunda-feira, 14 de janeiro de 2013 12:02
- Não Marcado como Resposta Leandro Bittencourt terça-feira, 12 de março de 2013 00:10
-
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