l00ker Posted August 18, 2014 at 11:19 AM Report Share #564974 Posted August 18, 2014 at 11:19 AM Boas pessoal, No meu programa, na parte do login eu queria por uma ProgressBar, o programa está um pouco lento ao abrir a base de dados e a procurar se os dados estão corretos, no entaonto enquanto o programa faz isso eu gostaria de colocar uma progressbar ou nao sei se da para colocar um gif numa picturebox (http://innovativeendurance.com/image/h6viz.gif), eu testei e o gif funciona corretamente no visualbasic, mas o meu problema é o seguinte a picturebox com o gif esta invisivel, quando eu carrego no botão para fazer o LOGIN eu ponho a picturebox visivel mas o gif está estático, penso que o programa está lento enquanto executo o algoritmo, nao sei se me podem ajudar. Obrigado, Link to comment Share on other sites More sharing options...
herty Posted August 18, 2014 at 11:35 AM Report Share #564976 Posted August 18, 2014 at 11:35 AM Boas, Talvez seja porque a thread do UI esteja a bloquear ate fazeres o login. Tenta fazer o login noutra thread libertando o UI. 1 Report Link to comment Share on other sites More sharing options...
nelsonr Posted August 18, 2014 at 01:22 PM Report Share #564980 Posted August 18, 2014 at 01:22 PM Boas, testei aqui e não ha nenhum problema na utilização desse gif numa picture box. Adicionaste a imagem à picturebox usando o gif mesmo? Não converteste para outro formato? 1 Report Link to comment Share on other sites More sharing options...
l00ker Posted August 18, 2014 at 09:42 PM Author Report Share #565005 Posted August 18, 2014 at 09:42 PM Nao, o gif esta a funcionar corretamente no VB, eu tenho o botao de LOGIN e a minha primeira linha de codigo ao clicar no botao é pbGif.visible=true, e em seguida executa o algoritmo do LOGIN e enquanto é executado o guif esta estatico, só quando o alguritmo do LOGIN finaliza é que o gif fica a rodar. Nao sei se me faço entender.. Link to comment Share on other sites More sharing options...
nelsonr Posted August 18, 2014 at 10:23 PM Report Share #565009 Posted August 18, 2014 at 10:23 PM Pois, se estás bloqueado a fazer alguma operação sem permitir a aplicação executar os eventos então isso fica bloqueado. A solução passa pelo que o herty indicou. Tens de ter a parte de login a ser processada num thread separado Exemplo do botão login Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click ' Mostrar a imagem de processando PictureBox1.Visible = True ' Criar um novo thread que vai executar o método EfetuarLogin Dim thread As New Thread(AddressOf EfetuarLogin) ' Iniciar a thread thread.Start() ' Ciclo que processa enquanto a thread está a ser executada While (thread.IsAlive) ' Permite a aplicação processar os eventos e assim não ficar bloqueada Application.DoEvents() End While ' Esconder a imagem de processando PictureBox1.Visible = False End Sub ' Método de exemplo que vai efetuar o procedimento de login Private Sub EfetuarLogin() ' Para testes esperar apenas 5 segundos Threading.Thread.Sleep(5000) End Sub Link to comment Share on other sites More sharing options...
l00ker Posted August 18, 2014 at 11:06 PM Author Report Share #565016 Posted August 18, 2014 at 11:06 PM (edited) Adicionei 'Control.CheckForIllegalCrossThreadCalls = False' no EfetuaLogin Já testei está a funcionar perfeitamente, mas encontrei outro problema, ao abrir o póximo form o form fecha logo em seguida, nao sei porquê, penso que seja por causa do codigo que adicionei ('Control.CheckForIllegalCrossThreadCalls = False'), sem isto nao cosigo esconder ou abrir forms estou certo? como consigo resolver este problema? Edited August 18, 2014 at 11:37 PM by l00ker Link to comment Share on other sites More sharing options...
l00ker Posted August 19, 2014 at 12:23 AM Author Report Share #565024 Posted August 19, 2014 at 12:23 AM Consegui resolver o problema em vez de usar .show() usei o .showdialog(), obrigado a todos 🙂 Link to comment Share on other sites More sharing options...
l00ker Posted August 19, 2014 at 01:43 PM Author Report Share #565065 Posted August 19, 2014 at 01:43 PM (edited) Estou novamente com problemas pessoal 😞 ao usar o showdialog(), no form a seguir estou com alguns problemas, nao consigo fechar nem abrir outros forms, se usar o show() ao abrir o form ele fecha logo de seguida. Edited August 19, 2014 at 01:43 PM by l00ker Link to comment Share on other sites More sharing options...
herty Posted August 19, 2014 at 01:45 PM Report Share #565066 Posted August 19, 2014 at 01:45 PM (edited) Em vez de meteres o Control.CheckForIllegalCrossThreadCalls = false, tenta fazer como te disseram antes, mete uma thread separada a fazer o login. Edited August 19, 2014 at 01:45 PM by herty Link to comment Share on other sites More sharing options...
l00ker Posted August 19, 2014 at 02:04 PM Author Report Share #565067 Posted August 19, 2014 at 02:04 PM Eu ja tenho 1 thread para o login Link to comment Share on other sites More sharing options...
herty Posted August 19, 2014 at 03:14 PM Report Share #565071 Posted August 19, 2014 at 03:14 PM (edited) Com essa thread nova o gif ainda bloqueia? Não estou a perceber qual é o teu problema, explica melhor a situação. Edited August 19, 2014 at 03:15 PM by herty Link to comment Share on other sites More sharing options...
l00ker Posted August 19, 2014 at 03:32 PM Author Report Share #565075 Posted August 19, 2014 at 03:32 PM Com o thread eu nao estava a conseguir mudar o nome dos objetos por codigo entao passei tudo para variaveis e mudei o nome dos objetos com as variaveis fora da thread, agora esta tudo a funcionar corretamente.. Obrigado por tudo 🙂 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now