Jump to content
pluis3103

Threads C#

Recommended Posts

pluis3103

Boa tarde,

Estou a fazer um código que de x em x tempo acede a um alojamento web e poe lá alguma informação.Para isso tou a utilizar threads,mas devo estar a fazer alguma coisa mal visto que o código só é chamado 1 vez...

Devo estar a fazer alguma coisa mal visto que sou iniciante nesta linguagem. A ideia é a aplicação correr continuamente.

Vou por aqui a parte do código que executa o que quero para me poderem ajudar :

private void Form1_Load(object sender, EventArgs e)
        {
            ActualizarBB ActualizarBBt = new ActualizarBB();
            
            Thread oThread = new Thread(new ThreadStart(ActualizarBBt.Actualizar));
            try
            {
                oThread.Start();
                Thread.Sleep(15);
            }
            catch (ThreadStateException ext)
            {
                MessageBox.Show(ext.ToString());
             }
            

         }

Share this post


Link to post
Share on other sites
softklin

Esse código executa apenas uma vez, porque não há qualquer ciclo que indique ao C# que o deve executar mais de uma vez. O sleep permite suspender a execução da thread, no teu caso, em 15 milissegundos (para 15 segundos, deveria ser 15000).

Podes fazer de várias maneiras:

- a thread seria um ciclo infinito do género

while (1) {

  // teu codigo para actualizar aqui

  thread.sleep(x);  // x o teu tempo pretendido em milisegundos, por exemplo, 10 segundos, x = 10000
}

- simplesmente usar o objecto Timer, cujo propósito é fazer exactamente aquilo que pretendes.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
pluis3103

Esse código executa apenas uma vez, porque não há qualquer ciclo que indique ao C# que o deve executar mais de uma vez. O sleep permite suspender a execução da thread, no teu caso, em 15 milissegundos (para 15 segundos, deveria ser 15000).

Podes fazer de várias maneiras:

- a thread seria um ciclo infinito do género

while (1) {

  // teu codigo para actualizar aqui

  thread.sleep(x);  // x o teu tempo pretendido em milisegundos, por exemplo, 10 segundos, x = 10000
}

- simplesmente usar o objecto Timer, cujo propósito é fazer exactamente aquilo que pretendes.

Muito obrigado pela ajuda :thumbsup:

Existe alguma diferença entre usar o Timer ou uma Thread ??

Alguma é melhor que a outra??

Share this post


Link to post
Share on other sites
softklin

Fazem as duas basicamente o mesmo, fornecer suporte multithread ao teu programa. O timer requer menos conhecimentos, para facilitar o desenvolvimento. Deixo aqui uma resposta mais completa:

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/c5b0e037-ccb5-42c0-bb0a-304572c8c8d2/

Em suma, usa a que te parecer mais indicado. Na minha opinião pessoal, podes usar um timer, porque queres um evento recorrente (actualizar o site de x em x tempo). Uma thread também pode correr recorrentemente, mas requer um pouco mais de configuração manual.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
pluis3103

Fazem as duas basicamente o mesmo, fornecer suporte multithread ao teu programa. O timer requer menos conhecimentos, para facilitar o desenvolvimento. Deixo aqui uma resposta mais completa:

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/c5b0e037-ccb5-42c0-bb0a-304572c8c8d2/

Em suma, usa a que te parecer mais indicado. Na minha opinião pessoal, podes usar um timer, porque queres um evento recorrente (actualizar o site de x em x tempo). Uma thread também pode correr recorrentemente, mas requer um pouco mais de configuração manual.

Ok, muito obrigado,

Já agora, tenho outra dúvida.

Estou a tentar fazer um select a uma base de dados onde quero listar todos os produtos cuja data de actualização é maior que ontem.

Tenho o seguinte código :

                string sDataAtual = System.DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd");

                //MessageBox.Show(sDataAtual);

                try

                {

                    SqlDataReader myReader = null;

                    SqlCommand myCommand = new SqlCommand("SELECT DESIGN,REF,UDATA,IVA1INCL,BLOQUEADO,FAMINOME,SITE,OBS,OPENDATA,IMAGEM FROM ST WHERE UDATA > " + sDataAtual. + "",

                                                            sqlConn);

Não consigo obter nada...o que estou a fazer de mal?

Muito obrigado pela ajuda

Share this post


Link to post
Share on other sites
softklin

Tentar colocar o teu valor entre plicas:

new SqlCommand("SELECT DESIGN,REF,UDATA,IVA1INCL,BLOQUEADO,FAMINOME,SITE,OBS,OPENDATA,IMAGEM FROM ST WHERE UDATA > '" + sDataAtual. + "'", sqlConn);

Ou então sql parameters, mais recomendado: http://buddylindsey.com/sql-parameters-in-c/

Base de dados em C# não é o meu forte, mas vê se com algumas dessas alterações funciona.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
Rechousa

Olá,

Estou a tentar fazer um select a uma base de dados onde quero listar todos os produtos cuja data de actualização é maior que ontem.

Se é maior do que ontem então queres ver os registos de "hoje", certo?  :)

Experimenta assim:

SqlCommand myCommand = new SqlCommand("SELECT DESIGN,REF,UDATA,IVA1INCL,BLOQUEADO,FAMINOME,SITE,OBS,OPENDATA,IMAGEM FROM ST WHERE UDATA >= CONVERT(CHAR(8), GETDATE(), 112)", sqlConn);

Espero ter ajudado.


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

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

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