none
[VB.NET] Retornar um código infinitamente e se possível finitamente. RRS feed

  • Pergunta

  • Necessito de uma função que simule um timer, no timer nos podemos repetir um código infinitamente com o delay que escolhemos, na minha aplicação eu necessito retornar um código infinitamente várias vezes, e não é possível fazer todos em um timer só, tem como eu retornar um código sem precisar de timer?Por exemplo, vamos supor que eu tenho:

     Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            MsgBox("Código sendo retornado infinitamente..")

           ' Aqui teria algum código que retorne o código acima infinitamente?Em que na tela aparecesse várias mensagens?

     End Sub

    É claro que não é do código Msgbox que eu falo, e sim de outro mais complexo mas a utilidade é a mesma, alem de retornar infinitamente tem como retornar algumas vezes e depois parar?

    Obrigado.

    sábado, 11 de janeiro de 2014 01:22

Respostas

  • Deu certo só que entre aspas, no timer o código executa infinitamente sem travar a aplicação, esse aí a aplicação trava, não tem como concertar tipo criando um thread? Não consegui criar thread ... Ou sou eu que estou usando errado, me corrija

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Label1.Text = 1
            Funcao()
        End Sub
    
        Public Sub Funcao()
            For i As Integer = 0 To 2
                Label1.Text = Label1.Text + 1
                i -= 1
            Next
        End Sub

    Em vez de ficar mudando o valor da label pra + 1 infinitamente como timer faz a aplicação muda apenas uma vez e trava, fiz errado? Com msgbox deu certo que apareceu msgs infinitas, porém com a aplicação travada ... Como faz para destravar? Obrigado ...

    • Marcado como Resposta João Glauco sábado, 11 de janeiro de 2014 05:56
    sábado, 11 de janeiro de 2014 04:27
  • Ola,

    sim a aplicação travara e seu processador vai a mil rs, segue abaixo um exemplo simples usando thread, o button1 faz os msgbox() aparecerem infinitamente, mas, se quiser parar basta apertar o button2.

    Imports System.Threading
    
    Public Class Form1
        Private t1 As Thread
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim teste As New teste
            t1 = New Thread(AddressOf Me.msg)
            t1.Start()
        End Sub
    
        Sub msg()
            For i = 0 To 2
                MsgBox("oi")
                i -= 1
            Next
        End Sub
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            t1.Abort()
        End Sub
    End Class

    Att,

    Wennder A. dos Santos

    Por favor, se minha resposta solucionou seu problema ou sua dúvida marque como Resposta e se foi útil marque como útil. Isso ajuda outras pessoas com o mesmo problema ou dúvida.


    sábado, 11 de janeiro de 2014 05:19

Todas as Respostas

  • Ola João,

    você está se contradizendo em sua pergunta, você quer um código que execute determinado comando infinitamente? Se for isso, o trecho abaixo vai funcionar:

    For i As Integer = 0 To 2
                i -= 1
    
            Next

    Qualquer coisa posta ae.

    Att,

    Wennder A. dos Santos

    Por favor, se minha resposta solucionou seu problema ou sua dúvida marque como Resposta e se foi útil marque como útil. Isso ajuda outras pessoas com o mesmo problema ou dúvida.

    • Marcado como Resposta João Glauco sábado, 11 de janeiro de 2014 04:16
    • Não Marcado como Resposta João Glauco sábado, 11 de janeiro de 2014 04:20
    sábado, 11 de janeiro de 2014 03:51
  • Deu certo só que entre aspas, no timer o código executa infinitamente sem travar a aplicação, esse aí a aplicação trava, não tem como concertar tipo criando um thread? Não consegui criar thread ... Ou sou eu que estou usando errado, me corrija

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Label1.Text = 1
            Funcao()
        End Sub
    
        Public Sub Funcao()
            For i As Integer = 0 To 2
                Label1.Text = Label1.Text + 1
                i -= 1
            Next
        End Sub

    Em vez de ficar mudando o valor da label pra + 1 infinitamente como timer faz a aplicação muda apenas uma vez e trava, fiz errado? Com msgbox deu certo que apareceu msgs infinitas, porém com a aplicação travada ... Como faz para destravar? Obrigado ...

    • Marcado como Resposta João Glauco sábado, 11 de janeiro de 2014 05:56
    sábado, 11 de janeiro de 2014 04:27
  • Ola,

    sim a aplicação travara e seu processador vai a mil rs, segue abaixo um exemplo simples usando thread, o button1 faz os msgbox() aparecerem infinitamente, mas, se quiser parar basta apertar o button2.

    Imports System.Threading
    
    Public Class Form1
        Private t1 As Thread
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim teste As New teste
            t1 = New Thread(AddressOf Me.msg)
            t1.Start()
        End Sub
    
        Sub msg()
            For i = 0 To 2
                MsgBox("oi")
                i -= 1
            Next
        End Sub
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            t1.Abort()
        End Sub
    End Class

    Att,

    Wennder A. dos Santos

    Por favor, se minha resposta solucionou seu problema ou sua dúvida marque como Resposta e se foi útil marque como útil. Isso ajuda outras pessoas com o mesmo problema ou dúvida.


    sábado, 11 de janeiro de 2014 05:19
  • Está correto, muito obrigado. Já marquei como resposta, só queria avisar que tem que adicionar o comando

    Control.CheckForIllegalCrossThreadCalls = False

    Para evitar um erro...

    sábado, 11 de janeiro de 2014 06:09