Jump to content
Sign in to follow this  
BlitzMX

Usar controls dentro de uma Thread

Recommended Posts

BlitzMX

Bom dia

Tenho o seguinte código com erro nas variáveis e uso de controls.

Nas variáveis posso declara-las globais e devo conseguir resolver o problema.

Como faço para chamar os controls de dentro da thread?

Obrigado

private void btnIniciar_Click(object sender, EventArgs e)
       {       
           if (lblEstado.Text!=("Ficheiro Incorrecto"))
           {
               Thread t = new Thread(NewThread);
               t.Start();
           }          
       }

       static void NewThread()
       {          
           // Adicionar loop por cada ordem               
           for (rowi = 0; rowi < dataGridView1.Rows.Count - 1; rowi++)
           {
               if (Convert.ToString(dataGridView1.Rows[rowi].Cells[0].Value) != "")
               {
                   webBrowser1.Navigate("http://ALGO.QUALQUERCOISA.pt/ALGO/Ordens_Detalhe.aspx?TipoOperacao=SON&OrdemId=" + Convert.ToString(dataGridView1.Rows[rowi].Cells[0].Value));
                   while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
                   {
                       Application.DoEvents();
                   }
               }
               else
               {
                   break;
               }
           }         
       }

Edited by BlitzMX

Share this post


Link to post
Share on other sites
nelsonr

Já agora, podes explicar o que estás a tentar fazer?

Pelo que percebi, tens uma grelha em que a primeira coluna tem um ID,

Depois no thread passas por todas as linhas da grelha e vais ler a um endereço o site, passando o ID pelo endereço.

Aqui pretendes só ler o conteúdo desse endereço? porque é que estás a usar o componente webbrowser para cada linha?

Share this post


Link to post
Share on other sites
BlitzMX

Estou a abrir uma página de cada vez com um Numero de identificação, e por cada página quando carregada ele saca um outro valor do codigo da pagina.

Tudo funciona mas...

Não posso mexer em mais nada senão o ciclo para e só recomeça quando deixo de mexer na janela.

A ideia era colocar isso a funcionar de forma independente só isso.

Share this post


Link to post
Share on other sites
bioshock

Epá, ainda bem que o meu artigo foi relativamente útil :cheesygrin: ..mas já agora, eu agora encontro-me em http://stuffpinho.com :thumbsup:

Eu estou mais habituado com backgroundworkers ao invés dessas threads. O que deves fazer é verificar se o controlo precisa de ser invocado:

if(controlo.InvoqueRequired()){

}

Ou então chamar logo directamente:

controlo.Invoke((MethodInvoker) delegate {
  // for(int i = 0; ...
  // etc
});

Edited by bioshock

Share this post


Link to post
Share on other sites
nelsonr

Mas BlitzMX,

o uso de threads é para isso mesmo, não bloquear o funcionamento da aplicação enquanto faz outra operação.

O que pretendes é só mesmo ler o conteúdo da página que lês para cada linha?

Se for assim, provavelmente o melhor será usares o WebRequest.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • 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.