🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
4 messages
4 total messages Started by Snuyt Thu, 05 Feb 2004 18:23
VB.NET: thread error
#3143
Author: Snuyt
Date: Thu, 05 Feb 2004 18:23
88 lines
3614 bytes
Hallo,

Ik heb een client-serverprogrammatje. Hieronder staat een uittreksel 
(vereenvoudigd) van mijn clientcode. In de sub DRAW_AN_IMAGE probeer ik 
een picturebox toe te voegen aan de Form, maar dat lukt niet, hij geeft 
als error:
"Controls created on one thread cannot be parented to a control on a 
different thread."
op de lijn :         Me.Controls.Add(p)

Weet er iemand wat ik hieraan kan doen?



Private Sub form_Load(ByVal sender As System.Object, ByVal e As_
    System.EventArgs) Handles MyBase.Load
         Try
             client = New TcpClient(ip, port)
             client.GetStream.BeginRead(readBuffer,0,READ_BUFFER_SIZE, _
	        AddressOf DoRead, Nothing)

         Catch Ex As Exception
             MsgBox("Cannot Connect", MsgBoxStyle.Exclamation, "Error")
             Me.Close()
         End Try
End Sub


Private Sub DoRead(ByVal ar As IAsyncResult)
         Dim BytesRead As Integer
         Dim strMessage As String
         Try
             BytesRead = client.GetStream.EndRead(ar)
             If BytesRead < 1 Then
                 MarkAsDisconnected("No butes read")
                 Exit Sub
             End If

             ' Convert the byte array the message was saved into, minus
             ' two for the Chr(13) and Chr(10)
             strMessage = Encoding.ASCII.GetString(readBuffer,0,_
         	BytesRead - 2)

         Catch e As Exception
             MarkAsDisconnected(e.Message)
             Exit Sub
         End Try
         ProcessCommands(strMessage)
         Try
             client.GetStream.BeginRead(readBuffer, 0, READ_BUFFER_SIZE,_
         AddressOf DoRead, Nothing)
         Catch e As Exception
             MarkAsDisconnected(e.Message)
         End Try
End Sub

     ' Process the command received from the server,
     ' and take appropriate action.
Private Sub ProcessCommands(ByVal strMessage As String)
         Dim dataArray() As String

         ' Message parts are divided by "|"  Break the string
         ' into an array accordingly.
         dataArray = strMessage.Split(Chr(124))

         ' dataArray(0) is the command.
         Select Case dataArray(0)
             Case "IMG"
     		    DRAW_AN_IMAGE(dataArray(1))
             Case Else
         End Select
End Sub


Private Sub DRAW_AN_IMAGE(ByVal data As String)
         Dim p As New PictureBox()
         p.Image = New Bitmap("pics/" + data + ".bmp")
         p.SetBounds(1, 1, 72, 96)
         Me.Controls.Add(p)
         p.BringToFront()
     End Sub




Bedankt,

	Snuyt
Re: VB.NET: thread error
#3155
Author: E.N.
Date: Sat, 07 Feb 2004 14:34
17 lines
1860 bytes
"Snuyt" <snuyt_nospam@skynet.be> wrote in message
news:40228a21$0$310$ba620e4c@news.skynet.be...
> Hallo,
>
> Ik heb een client-serverprogrammatje. Hieronder staat een uittreksel
> (vereenvoudigd) van mijn clientcode. In de sub DRAW_AN_IMAGE probeer ik
> een picturebox toe te voegen aan de Form, maar dat lukt niet, hij geeft
> als error:
> "Controls created on one thread cannot be parented to a control on a
> different thread."
> op de lijn :         Me.Controls.Add(p)
>
> Weet er iemand wat ik hieraan kan doen?
>

Ja, de main thread (die van je form) moet je het grafische werk laten doen.
De ander threads niet. Dit is een vrij logische beperking.
Re: VB.NET: thread error
#3156
Author: Snuyt
Date: Sat, 07 Feb 2004 17:33
26 lines
2008 bytes
E.N. wrote:

> "Snuyt" <snuyt_nospam@skynet.be> wrote in message
> news:40228a21$0$310$ba620e4c@news.skynet.be...
> 
>>Hallo,
>>
>>Ik heb een client-serverprogrammatje. Hieronder staat een uittreksel
>>(vereenvoudigd) van mijn clientcode. In de sub DRAW_AN_IMAGE probeer ik
>>een picturebox toe te voegen aan de Form, maar dat lukt niet, hij geeft
>>als error:
>>"Controls created on one thread cannot be parented to a control on a
>>different thread."
>>op de lijn :         Me.Controls.Add(p)
>>
>>Weet er iemand wat ik hieraan kan doen?
>>
> 
> 
> Ja, de main thread (die van je form) moet je het grafische werk laten doen.
> De ander threads niet. Dit is een vrij logische beperking.
> 

Als het zo is, dan is het zo, maar wat is daar zo logisch aan?

	Snuyt
Re: VB.NET: thread error
#3157
Author: E.N.
Date: Sat, 07 Feb 2004 18:32
39 lines
2812 bytes
"Snuyt" <snuyt_nospam@skynet.be> wrote in message
news:4025217d$0$7037$ba620e4c@news.skynet.be...
> E.N. wrote:
>
> > "Snuyt" <snuyt_nospam@skynet.be> wrote in message
> > news:40228a21$0$310$ba620e4c@news.skynet.be...
> >
> >>Hallo,
> >>
> >>Ik heb een client-serverprogrammatje. Hieronder staat een uittreksel
> >>(vereenvoudigd) van mijn clientcode. In de sub DRAW_AN_IMAGE probeer ik
> >>een picturebox toe te voegen aan de Form, maar dat lukt niet, hij geeft
> >>als error:
> >>"Controls created on one thread cannot be parented to a control on a
> >>different thread."
> >>op de lijn :         Me.Controls.Add(p)
> >>
> >>Weet er iemand wat ik hieraan kan doen?
> >>
> >
> >
> > Ja, de main thread (die van je form) moet je het grafische werk laten
doen.
> > De ander threads niet. Dit is een vrij logische beperking.
> >
>
> Als het zo is, dan is het zo, maar wat is daar zo logisch aan?

Als 1 thread tekent op het form, en een andere thread wil juist weten of
bepaalde controls beschikbaar zijn, maar die worden juist getekend, dan kun
je voorstellen, dat we een deadlock kunnen krijgen. Wat ook kan, is dat 1
thread bezig is te tekenen, in een control, terwijl een andere de control
fijn weghaalt. Zoiets kun je niet aan de run-time overlaten, die zou dan
'voor de veiligheid' tijdens een willekeurige tekenopdracht, het form moeten
locken waardoor je terug bent bij single-thread :)


> Snuyt
>
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads