Ir para conteúdo
eduardohaag

Controle de trabalho usando threads

Recommended Posts

Olá,

Mais uma vez aqui estou eu com uma duvida que não estou conseguindo resolver.

Estou desenvolvendo um ERP para a grafica da minha esposa. Nesse sistema existe um modulo que registra o tempo trabalhado.

Para fazer isso existe um botão no formulário principal, que quando é clicado salva a hora na variável entrada, e quando clicado novamente ele registra no banco de dados o intervalo entre a entrada e saida.

Até ai tudo ok. Porém as vezes a pessoa sai e esquece de clicar para registrar a saida.

 

Então gostaria de fazer com que a cada 5 minutos fosse verificado se teve alteração na posição do ponteiro do mouse, porém permitindo que o usuário possa usar o programa.

 

Procurando na internet descobri que para isso o melhor seria usar uma thread para fazer essa verificação da posição do mouse em segundo plano já que seria executado a cada 5 minutos e dessa forma travaria a execução do form principal.

 

O problema está que quando ele detecta que mouse ficou parado por mais de 5 minutos e executa o codigo que salvo o intervalo no banco de dados acontece esse erro quando chega na linha "btEntrada.Text = "Registrar Entrada"" : "System.InvalidOperationException: 'Operação entre threads inválida: controle 'ToolStrip1' acessado de um thread que não é aquele no qual foi criado.'

 

Li que tenho que usar algo como invoke e delegate, mas mesmo estudando não consegui entender como implementar.

meu codigo é o seguinte:

 

Imports System.ComponentModel

Public Class Principal_content
    Dim saida As DateTime
    Dim tempo As TimeSpan
    Dim entrada As DateTime
    Dim ponteiro As Point
    
    Sub GerPonto()
        Do
            Threading.Thread.Sleep(5000)
            If ponteiro = Cursor.Position Then
                Call registraponto()
            End If
            ponteiro = Cursor.Position
        Loop
    End Sub
  
  

    Private Sub btEntrada_Click(sender As Object, e As EventArgs) Handles btEntrada.Click
        Call registraponto
    End Sub
  
  

    Sub registraponto()
        Dim trd = New Threading.Thread(AddressOf GerPonto)

        If btEntrada.Text = "Registrar Entrada" Then
            entrada = FormatDateTime(Now)
            btEntrada.Text = "Registrar Saida"
            btEntrada.ToolTipText = "Registrar Saida"
            btEntrada.Image = My.Resources.appointment_new_Ativo
            btEntrada.ForeColor = Color.Lime
            trd.Start()
        Else
            trd.Abort()

            saida = Now
            tempo = saida.Subtract(entrada)
            sql = "INSERT INTO ponto (Data, Entrada, Saida, Segundos) VALUES (#" & Format(entrada, "MM/dd/yyyy") & "#, #" & Format(entrada, "hh:mm:ss") & "#, #" & Format(saida, "hh:mm:ss") & "#, " & Replace(FormatNumber(tempo.TotalSeconds, 0, TriState.False, TriState.False, TriState.False), ",", ".") & ")"

            btEntrada.Text = "Registrar Entrada"
            btEntrada.Text = "Registrar Entrada"
            btEntrada.Image = My.Resources.appointment_new_desativo
            btEntrada.ForeColor = Color.Red

            AcessoDB.ExecutarComando(sql, CommandType.Text, Nothing, AcessoDB.TipoDeComando.ExecuteNonQuey)
        End If

    End Sub
End Class

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por igadino
      Bom dia pessoal, convertir essa função do C# para vba ele funciona perfeitamento no excel e access
      porem estou tentendo usar ela no vb.net  editor VISUAL STUDIO 2013, aparece o erro conforme a imagem enexo, alguem consegue corrigir esse erro;
      Function crc_ccitt_ffff(strParam As String) As String
              Const CRC_POLY_CCITT As Long = &H1021&
              Const CRC_START_CCITT_FFFF As Long = &HFFFF&
              Dim crc As Long, b() As Byte, c As Long, i As Long, j As Long
              Dim crc_tabccitt(0 To 255) As Long
              For i = 0 To 255
                  crc = 0
                  c = i * 256
                  For j = 0 To 7
                      If (crc Xor c) And 32768 Then
                          crc = (crc * 2) Xor CRC_POLY_CCITT
                      Else
                          crc = crc * 2
                      End If
                      c = c * 2
                  Next j
                  crc_tabccitt(i) = crc
              Next i
                  b = strParam
              crc = CRC_START_CCITT_FFFF
              For i = 0 To UBound(b) Step 2
                  crc = (crc * 256) Xor crc_tabccitt(((crc \ 256) Xor b(i)) And 255)
                  crc = ((crc \ 65536) * 65536) Xor crc
              Next i
              crc_ccitt_ffff = Hex(crc)
          End Function

    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por Rafael Massula
      Boa noite pessoal, 
      Tenho o seguinte código em .Net que faz a comparação de uma senha que foi criptografada e salva no banco com a senha comum que o usuário conhece. O algoritmo que desenvolvi foi esse da image.png porem preciso converter essa verificação para JavaScript pela seguinte necessidade, será uma aplicação em electron e ela poderá funcionar offline então não terei como mandar a verificação para o servidor. Existe alguma possibilidade? Desde já agradeço. 

    • Por marceloDiegues
      Olá, amigos.
      Por favor,  me ajude com a seguintes perguntas.
       
      Qual a complexidade de um projeto desse?
      Qual o preçp de um projeto desse tipo?
       
      Quero contratar algum profissional para criar um site que tenha as seguintes funcionabilidades:
       
      1- Cadastro de usuário;
      2- Login e senha;
      3- O site seria muito parecido com o www.qconcursos.com, o usuário resolveria questões online.
      Contudo, haveria a possibilidade de criar salas tipo aqueles bate-papo da  UOL.
      Então, o usuário criaria salas de estudos, em que , resolveria questões e conseguiria se comunicar por chat com usuários que estejam na mesma sala.
       
      Exemplo em anexo:
       
       
       
       

    • Por iveusername
      Preciso de ajuda com o serviço de url de suporte ao vivo. Quando recebo um url de Umuly.com no Postman, outras pessoas não devem ter permissão para bater papo usando esse url. Supondo que 10.000 pessoas tenham um bate-papo ao vivo, o serviço deve criar 10.000 novos urls. Qual é a razão por trás disso? Como o serviço gera novos urls para cada um? (Em linguagem .NET Core)
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.