| |

VB.NET - FortgeschritteneRe: Multithreading, Multiclient und Controls | |  | Autor: dotty | Datum: 03.03.16 23:42 |
| Hallo Manfred,
ich habe die Invokes auch eigentlich bereits drin und gerade gemerkt, dass mit oder ohne "CheckForIllegalCrossCalls" in meinem Fall keinen Unterschied macht. Ich versuch es mal differenzierter.
Generell soll jede Aktion in einem Client an alle andere Clients kommuniziert werden. Das klappt auch soweit.
Das folgende Sub wird in einem Thread im Client ausgeführt um Signale des Servers zu empfangen. Der Thread wird im Load-Event des Formulars gestartet. Das im Thread ausgeführte Sub ist in einem anderen Modul. Der Server sendet jedes empfangene Signal an alle Clients. Wenn der empfangende Client nicht auch der sendende ist, wird das Sub sub_ShowNewPlayer ausgeführt, in welchem die Controls sichtbar gemacht werden. Das Sub sub_ShowNewPlayer wird definitiv durchlaufen und auch die darin enthaltenen Control-Befehle. Im GUI tut sich aber nichts. Eine Fehlermeldung gibt es auch nicht.
Public Sub subServerRead()
Dim inStream(10024) As Byte
Dim strPlayerID As String
While True
serverStream = clientSocket.GetStream()
serverStream.Read(inStream, 0, CInt(clientSocket.ReceiveBufferSize))
returndata = System.Text.Encoding.ASCII.GetString(inStream)
returndata = returndata.Substring(0, returndata.IndexOf("$"))
If Left(returndata, 3) = strPlayerAdded Then
strPlayerID = Right(returndata, 1)
If strPlayerID <> CStr(srtThisPlayerID) Then 'nur
' empfangende Clients
sub_ShowNewPlayer(CInt(strPlayerID))
End If
End If
End While
End Sub Das folgende Sub soll die Controls anpassen. Funktioniert aber nur beim sendenden Client, wo es außerhalb des Threads aufgerufen wird.
Public Sub sub_ShowNewPlayer(srtPlayerID As Short)
srtNrPlayers = srtNrPlayers + 1
If frmUITable.Controls("pnl_Player" + CStr(srtPlayerID)).InvokeRequired _
Then
Dim d As New sub_ShowNewPlayerCallback(AddressOf sub_ShowNewPlayer)
frmUITable.Controls("pnl_Player" + CStr(srtPlayerID)).Invoke(d, New _
Object() {srtThisPlayerID})
Else
frmUITable.Controls("pnl_Player" + CStr(srtPlayerID)).Visible = True
frmUITable.Controls("pnl_Player" + CStr(srtPlayerID)).BringToFront()
End If
If frmUITable.pbxCard1.InvokeRequired Then
Dim d As New sub_ShowNewPlayerCallback(AddressOf sub_ShowNewPlayer)
frmUITable.pbxCard1.Invoke(d, New Object() {srtThisPlayerID})
Else
frmUITable.pbxCard1.Image = frmUITable.imgList_Cards.Images.Item(1)
End If
frmUITable.stb_Status.Text = returndata
End Sub Hoffe das war differenziert genug.
Beitrag wurde zuletzt am 03.03.16 um 23:43:53 editiert. |  |
 Multithreading, Multiclient und Controls | 1.931 | dotty | 02.03.16 18:45 |   Re: Multithreading, Multiclient und Controls | 1.128 | Manfred X | 03.03.16 18:03 |   Re: Multithreading, Multiclient und Controls | 1.147 | dotty | 03.03.16 23:42 |    Re: Multithreading, Multiclient und Controls | 1.177 | Manfred X | 04.03.16 00:16 |   Re: Multithreading, Multiclient und Controls | 1.279 | dotty | 04.03.16 12:57 |    Re: Multithreading, Multiclient und Controls | 1.155 | Manfred X | 04.03.16 13:03 |   Re: Multithreading, Multiclient und Controls | 1.121 | dotty | 04.03.16 13:53 |    Re: Multithreading, Multiclient und Controls | 1.100 | Manfred X | 04.03.16 16:00 |   Re: Multithreading, Multiclient und Controls | 1.112 | dotty | 04.03.16 16:51 |    Re: Multithreading, Multiclient und Controls | 1.078 | Manfred X | 04.03.16 17:04 |   Re: Multithreading, Multiclient und Controls | 1.161 | dotty | 04.03.16 17:24 |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevWizard für VB5/6 
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|