AJUDA COM THREAD

SABIDAOXD 19/07/2012 19:47:14
#406281
Olá pessoal, fiz um projeto que tenho que criar imagens e move-las, como são muitas eu tenho q criar usando o new picturebox
mas na thread esta dando erro quando vou adicionala na form usando a thread
se algum souber onde está o erro, estou mandando o exemplo do projeto em anexo
obrigado
OCELOT 19/07/2012 20:58:07
#406284
Você não pode criar controles em um thread e adicionar em forms de outro thread, eles precisam ser todos do mesmo thread.

No geral você deve usar threads apenas para operações em segundo plano, que não afetam a interface, e não é recomendado desativar o CheckForIllegalCrossThreadCalls já que ele ajuda a evitar que você modifique os controles de outro thread, o que pode causar erros imprevistos, quando você precisa atualizar a interface através de um thread deve-se usar o Invoke do form para garantir que o código que atualiza o form rode no thread dele, sendo que deve-se manter isso o mínimo possível, já que se usar muito isso deixaria o processo mais lento que fazer com um thread só.
SABIDAOXD 19/07/2012 23:14:57
#406298
tem como vc me fazer um explo? pq ja tentei usar invoke mas travou do mesmo jeiro
KERPLUNK 19/07/2012 23:32:00
#406304
é simples, deixe-me veja aqui
SABIDAOXD 19/07/2012 23:53:01
#406309
eu disse que ja tentei e não está funcionando, a imagem não aparece, pq estou criando ela no código usando new
olha só
Citação:

Imports System.Threading
Public Class Form1
Dim asda As PictureBox
Dim asdaa As Thread
Dim kkk As MethodInvoker

Public Delegate Sub qqq()


Public Sub ddd()
Dim asda As New PictureBox
asda.BackColor = Color.CadetBlue
asda.Left = 0
asda.Top = 0
asda.Width = 10
asda.Height = 10
asda.BringToFront()
Dim dds As New qqq(AddressOf eee)
dds.Invoke()
While asda.Left < 100
asda.Left += 1
Thread.Sleep(5)
asda.Refresh()
End While
End Sub

Public Sub eee()
Controls.Add(asda)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim asda As New Thread(AddressOf ddd)
asda.IsBackground = True
asda.Start()
End Sub


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Control.CheckForIllegalCrossThreadCalls = False
End Sub
End Class

KERPLUNK 19/07/2012 23:55:38
#406310
Crie uma classe com uma das propriedades para representar a sua imagem. Crie um método na classe que lê a imagem e a coloca na propriedade. Veja aqui como isso funciona
SABIDAOXD 20/07/2012 00:03:16
#406311
então, eu tentei assim tbm, olha só, se eu colocar assim direto no botão da certo mas só vai uma imagem por vez por causa do while

Citação:

Public Sub ddd()
Dim asda As New PictureBox
asda.BackColor = Color.CadetBlue
asda.Left = 0
asda.Top = 0
asda.Width = 10
asda.Height = 10
asda.BringToFront()
Controls.Add(asda)
While asda.Left < 100
asda.Left += 1
Thread.Sleep(5)
asda.Refresh()
End While
End Sub



mas eu quero chamar várias imagens ao mesmo tempo, e não adianta roda isso por outro modo sem ser uma thread separada da principal, e se eu iso um invoke ou delegate pra adicionar o (asda) que ela não vai pra form pq ela foi crianda usando
Citação:

Dim asda As New PictureBox

, ai eu quero se fosse possível me mandar um exemplo de como fazer isso, pq não sei mais como fazer
SABIDAOXD 20/07/2012 00:14:09
#406312
é porque eu quero fazer um jogo tipo esse

ai preciso de ir criando várias imagens
SABIDAOXD 20/07/2012 00:17:08
#406314
https://www.youtube.com/watch?v=EnJMohlO5BM
KERPLUNK 20/07/2012 00:37:48
#406315
Amigo, fazer jogos, não é tarefa simples, se for iniciante, sugiro que comece com algo mais simples. Além disso, você já começou pelo caminho errado. Existem outras formas de se fazer jogos usando o .NET e com certeza séries de imagens, não é nem de perto a melhor solução. Sugiro que veja o OpenSimulator, ou mesmo o Microsoft XNA
SABIDAOXD 20/07/2012 00:46:07
#406316
eu sei fazer jogos só quero saber como faço isso ai
Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas