Jump to content
vastri

[Resolvido] Erro Design - Runtime

Recommended Posts

vastri

Olá

Tenho um botão que no evento Click faz uma serie de operações, adiciona dados na bd, edita, cria imagens, redimensiona imagens etc...

No meio dessas operações tenho código para mostrar uns "bonequinhos" para o utilizador ter a noção do que vai acontecendo, basicamente uma PictureBox que deveria mostrar um "wait.gif" quando a operação esta em curso e um "ok.jpg" quando operação está finalizada.

Acontece que o código é todo executado e os "bonequinhos" só aparecem no final, quando todo o código já foi executado.

Já pesquisei design time, runtime, já tentei o sleep(1000) após o código dos "bonequinhos" mas nada funciona é tudo executado de "alto a baixo" na base do speed e só depois aparecem as imagens.

Como resolver?

Edited by vastri

Share this post


Link to post
Share on other sites
Knot

Não tenho grande experiência VB .NET, mas penso que primeiro são executadas as operações no servidor e só só depois são executadas as operações no dispositivo do utilizador.

Por exemplo podes ter no teu código a seguinte ordem:

- mostra imagem.

- apresenta relogio.

- faz bonecos.

- procura nome do utilizador na base de dados.

O que vai acontecer é que primeiro vai procurar o nome do utilizador na base de dados e só depois vai ser executado o restante. Pode ser isto que está a acontecer no teu caso, mas alguém com mais experiência poderá ajudar-te melhor. Se estiver errado peço desculpa!!!

Share this post


Link to post
Share on other sites
vastri

Obrigado Knot, a vontade de ajudar sobressai sempre à utilidade sabes certamente mais do que eu, e sim foi útil.

Esqueci-me de dizer que é uma app Windows, independentemente da ordem do código o resultado é sempre o mesmo, tenho estruturado +/- assim:

Picturebox Mostra wait.gif

Faz Operação 1

Picturebox Mostra ok.jpg

Picturebox Mostra wait.gif

Faz Operação 2

Picturebox Mostra ok.jpg

Picturebox Mostra wait.gif

Faz Operação 3

Picturebox Mostra ok.jpg

E por ai a fora….

O código deverá estar correto, penso que isto é mais um problema do Visual Studio, porque na verdade o código é correctamente executado (as imagens estão na PictureBox na altura certa, testei) só que não é visível, o código “bloqueia” o form e visualmente não acontece nada, só no final aparecem todas as PictureBox com o ok.jpg.

Penso que isto é um problema que tem a ver com o run time, design time (agora devo estar a dizer alguma barbaridade, mas…) deverá ter resolução simples o problema que não sei qual :)

Share this post


Link to post
Share on other sites
He B TeMy

O problema é que estás a executar tudo no mesmo thread.

E um thread só executa um bloco de código (linha) de cada vez... ou seja, como neste caso o thread que estás a usar é o do UI, (interface do utilizador, aka o teu Form.) ele 'freeza' e não te mostra mais nada até completar o código que está a correr, ou seja, mostrará sempre como tu dizes o resultado depois do último código que tens aí.

Se meteres o 'wait' depois do último 'ok' vais ver que ele vai mostrar o 'wait em vez do 'ok'.

O que te sugiro. para agora e para o futuro, é que nunca executes nenhuns "métodos/operações" um 'pouco-ou-mais' intensivos no UI thread, senão enquanto o bloco de código não executar por completo, o form estará sempre 'parado'.

ou seja, cria um thread e executa o que tiveres que executar nele.

dim t as new thread(AddressOf 'oteumétodo')
t.start()

Aconselho-te a leres sobre delegates, visto que pretendes aceder a controlos doutro thread. (do form, UI thread)

Se precisares de usar parametros no teu método, usa 'Sub()' em vez do 'AddressOf' em cima.

Edited by He B Te My

Share this post


Link to post
Share on other sites
vastri

Obrigado He B Te My, aprendi bastante com a tua dica, é mesmo isto, estava a procurar informação errada dai não aparecer solução.

Entretanto já tinha resolvido colocando o código do botão num BackgroundWorker, deixei o post "aberto" na expectativa de aparecer alguma solução, também e para perceber apliquei o teu método e claro funciona, obrigado já entendi o conceito vai certamente servir -me para futuro :thumbsup: .

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.