• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

watt

[VB.NET 2005] Problema ao fechar um thread

21 mensagens neste tópico

boa noite!

Estou aqui a tentar fechar um thread, só que dá sempre erro e fecha-me o programa. há ai alguem que me possa ajudar ??


                    If dados = "1" Then
                        User = txtuser.Text
                        threadler.Abort()
                        Principal.ShowDialog()
                        Me.Close()
                        y = 1
                    End If

tenho o thread a correr e a trabalhar bem , só que quando fecho aqui no codigo aparece o seguinte erro:

"ex = {System.Threading.ThreadAbortException}"

e o promenores do threada dizem todos "Data = error: cannot obtain value"

alguem sabe como posso dar a volta ??

thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

try
  threadler.Abort()
catch (System.Threading.ThreadAbortException)
end try

sempre que fazes um abort a uma thread é lançada a excepção System.Threading.ThreadAbortException

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ele assim dá erro na sintax... nao será assim

                        Try
                            threadler.Abort()
                        Catch ex As System.Threading.ThreadAbortException

                        End Try

???

mas assim tb não fecha o thread

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boa noite!

Estou aqui a tentar fechar um thread, só que dá sempre erro e fecha-me o programa. há ai alguem que me possa ajudar ??

penso que o facto de te fechar o programa é devido ao "Me.Close()".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ele assim dá erro na sintax... nao será assim

                        Try

                            threadler.Abort()

                        Catch ex As System.Threading.ThreadAbortException

                        End Try

???

mas assim tb não fecha o thread

sim, tens razão .. tinha erro de syntax.

tenta

  If Thrd.IsAlive Then
            Thrd.Abort()
            Thrd.Join()
  End If

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boa noite!

Estou aqui a tentar fechar um thread, só que dá sempre erro e fecha-me o programa. há ai alguem que me possa ajudar ??

penso que o facto de te fechar o programa é devido ao "Me.Close()".

Não esta não é a janela principal do programa, dai, não o devia fechar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

onde

Experimenta usar o controlo BackgroundWorker.

onde é q esta isso q eu nao encontro

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No mesmo sitio que escolhes botões, labels, etc... tem algures por lá um "BackgroundWorker", procura em todas as secções ou vê na secção que engloba todos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok já vi, então sugeres que use um backgroundworker para substituir o meu thread?? é isso ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

com o BackgroundWorker também nao deu... ou eu nao meti isto a dar como deve ser.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ele assim dá erro na sintax... nao será assim

                        Try

                            threadler.Abort()

                        Catch ex As System.Threading.ThreadAbortException

                        End Try

???

mas assim tb não fecha o thread

sim, tens razão .. tinha erro de syntax.

tenta

  If Thrd.IsAlive Then
            Thrd.Abort()
            Thrd.Join()
  End If

assim q toca no abort dá erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas se leres na documentação (MSDN), o Abort() a uma thread, vai sempre causar uma excepção... Tens de usar o Try/Catch para que o programa não crashe, agora parte dai e tenta fazer o que for preciso pa solucionar o teu problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pos ... já tenho o try desde de inicio, e no outros forumlarios trabalha bem e só neste é que dá o erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Li muito rapidamente o post, mas pelo que percebi estás a tentar executar código que devia ser executado numa outra thread. Ou seja, tas a executar uma thread secundárias, e queres abrir um form e depois fechar o actual. Suponho que tenhas que usar o Delegate para poderes executar o código na thread correcta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas que erro te dá? Diz-te que tás a tentar aceder a um objecto que está noutra thread ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

diz:

"ex = {System.Threading.ThreadAbortException}"

e o promenores do thread dizem todos "Data = error: cannot obtain value"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de seguir com algum código, só quero perguntar uma coisa. O formulário que estás a tentar fechar é o formulário inicial ? ou seja, é o Startup Form ?

Caso seja, vai às propriedades do projecto ( Project > Properties ) e altera o Shutdown Mode para "When last form closes"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deixo-te aqui um exemplo de como podes fazer...

Public Delegate Sub CloseFormHandler()

    Private Sub CloseForm()
        Me.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim t As System.Threading.Thread = New System.Threading.Thread(AddressOf ProcThread)
        t.Start()
    End Sub

    Private Sub ProcThread()
        'CloseForm()
        Me.Invoke(New CloseFormHandler(AddressOf CloseForm))
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora