| |
VB.NET - Ein- und UmsteigerPc's Verbinden mittels System.Net.Sockets Teil1 | | | Autor: dj.tommy | Datum: 23.09.15 09:57 |
| Hallo Leute !
Ich habe unter http://www.codeproject.com/Articles/11422/Winsock-NET
Ein sogenannter Nachbau von Winsock
Funktioniert aber, wie ich die Winsock Component als Test Projekt eingebunden habe, ist ein Problem entstanden, so das es mich wieder mal nicht weiss was er von mir will.
Ich habe 2 Formulare
Form1 mit 2 Winsocks als Server
Form2 mit 1 Winsock als Client
Wie ich in Form1 auf listen geklickt habe, und unter Form2 auch Connect geklickt habe, hat Form1 die Verbindung Apzeptiert aber Winsock in Form2 Kommt ein fehler meldung, die Lautet "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement Form2 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
Könnt ihr mir bitte weiter helfen Danke
nun der Code:
Public Class Form1
Private Sub Winsock1_Connected(sender As Winsock_Control.Winsock) Handles _
Winsock1.Connected
Me.Text = "Connect"
End Sub
Private Sub Winsock1_ConnectionRequest(sender As Winsock_Control.Winsock, _
requestID As Net.Sockets.Socket) Handles Winsock1.ConnectionRequest
Winsock2.Accept(requestID)
End Sub
Private Sub cmdSend_Click(sender As Object, e As EventArgs) Handles _
cmdSend.Click
Winsock2.Send("Server")
End Sub
Private Sub Winsock2_DataArrival(sender As Winsock_Control.Winsock, _
BytesTotal As Integer) Handles Winsock2.DataArrival
Dim Buffer As String = ""
Winsock2.GetData(Buffer)
MsgBox(Buffer)
End Sub
Private Sub cmdListen_Click(sender As Object, e As EventArgs) Handles _
cmdListen.Click
Winsock1.Listen()
End Sub
Private Sub Winsock1_HandleError(sender As Winsock_Control.Winsock, _
Description As String, Method As String, myEx As String) Handles _
Winsock1.HandleError
MsgBox(Description, CType(16, MsgBoxStyle), "Winsock1")
End Sub
Private Sub Winsock2_HandleError(sender As Winsock_Control.Winsock, _
Description As String, Method As String, myEx As String) Handles _
Winsock2.HandleError
MsgBox(Description, CType(16, MsgBoxStyle), "Winsock2")
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Form2.Show()
End Sub
End Class
Public Class Form2
Private Sub Winsock3_Connected(sender As Winsock_Control.Winsock) Handles _
Winsock3.Connected
Me.Text = "Connect"
End Sub
Private Sub Winsock3_DataArrival(sender As Winsock_Control.Winsock, _
BytesTotal As Integer) Handles Winsock3.DataArrival
Dim Buffer As String = ""
Winsock3.GetData(Buffer)
MsgBox(Buffer)
End Sub
Private Sub cmdConnect1_Click(sender As Object, e As EventArgs) Handles _
cmdConnect1.Click
Winsock3.Connect()
End Sub
Private Sub cmdSend1_Click(sender As Object, e As EventArgs) Handles _
cmdSend1.Click
Winsock3.Send("Client")
End Sub
Private Sub Winsock3_HandleError(sender As Winsock_Control.Winsock, _
Description As String, Method As String, myEx As String) Handles _
Winsock3.HandleError
MsgBox(Description, CType(16, MsgBoxStyle), "Winsock3")
End Sub
End Class Teil2 Folgt | |
Re: Pc's Verbinden mittels System.Net.Sockets Teil5 | | | Autor: dj.tommy | Datum: 23.09.15 10:04 |
| #Region " Private Functions/Subs "
Private Sub ChangeState(ByVal new_state As WinsockStates)
_State = new_state
RaiseEvent StateChanged(Me, _State)
End Sub
Private Sub OnConnected(ByVal asyn As IAsyncResult)
Try
_Client.EndConnect(asyn)
Me.ClientFinalizeConnection()
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Private Sub ClientFinalizeConnection()
ChangeState(WinsockStates.Connected)
_Client.BeginReceive(_byteBuffer, 0, 1024, SocketFlags.None, AddressOf _
DoRead, Nothing)
RaiseEvent Connected(Me)
End Sub
Private Sub DoListen()
Try
_sockList = New Socket(AddressFamily.InterNetwork, _
SocketType.Stream, ProtocolType.Tcp)
Dim ipLocal As New IPEndPoint(IPAddress.Any, LocalPort)
_sockList.Bind(ipLocal)
_sockList.Listen(1)
ChangeState(WinsockStates.Listening)
_sockList.BeginAccept(New AsyncCallback(AddressOf OnClientConnect), _
Nothing)
Catch ex As Exception
Me.Close()
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Private Sub OnClientConnect(ByVal asyn As IAsyncResult)
Try
Dim tmpSock As Socket
If GetState = WinsockStates.Listening Then
tmpSock = _sockList.EndAccept(asyn)
RaiseEvent ConnectionRequest(Me, tmpSock)
_sockList.BeginAccept(New AsyncCallback(AddressOf _
OnClientConnect), Nothing)
End If
Catch ex As Exception
Me.Close()
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Private Sub DoStreamReceive(ByVal ar As IAsyncResult)
Dim intCount As Integer
Try
SyncLock _Client
intCount = _Client.EndReceive(ar)
End SyncLock
If intCount < 1 Then
Me.Close()
ReDim _byteBuffer(1024)
RaiseEvent Disconnected(Me)
Exit Sub
End If
AddToBuffer(_byteBuffer, intCount)
'BuildString(_byteBuffer, 0, intCount)
Array.Clear(_byteBuffer, 0, intCount)
SyncLock _Client
_Client.BeginReceive(_byteBuffer, 0, 1024, SocketFlags.None, _
AddressOf DoStreamReceive, Nothing)
End SyncLock
Catch ex As Exception
Me.Close()
ReDim _byteBuffer(1024)
RaiseEvent Disconnected(Me)
End Try
End Sub | |
Re: Pc's Verbinden mittels System.Net.Sockets Teil2 | | | Autor: dj.tommy | Datum: 23.09.15 10:01 |
| Imports System.Net
Imports System.Net.Sockets
Imports System.ComponentModel
#Region " History "
''
'' 10-20-2005 - Changed buffer mechanism to allow storing of multiple objects
'' Required if you use multiple sends on bitmaps otherwise
'' they stack as one bitmap and don't retrieve properly.
'' Utilizes the EOT (end of transmission) (ascii 4) to do
'' the separating, although it still checks for a count
'' less than the byte length for backwards compatability.
'' - Sending data now appends an EOT at the end of the data
'' 10-19-2005 - Added support for direct byte() sending and retrieving
'' - Added support for bitmap sending and retrieving
'' 08-24-2005 - Released
''
#End Region
<System.ComponentModel.DefaultEvent("HandleError")> _
Public Class Winsock
Inherits System.ComponentModel.Component
#Region " Events "
Public Event Connected(ByVal sender As Winsock)
Public Event Disconnected(ByVal sender As Winsock)
Public Event DataArrival(ByVal sender As Winsock, ByVal BytesTotal As _
Integer)
Public Event ConnectionRequest(ByVal sender As Winsock, ByVal requestID As _
Socket)
Public Event SendComplete(ByVal sender As Winsock)
Public Event HandleError(ByVal sender As Winsock, ByVal Description As _
String, ByVal Method As String, ByVal myEx As String)
Public Event StateChanged(ByVal sender As Winsock, ByVal state As _
WinsockStates)
#End Region
#Region " Variables "
Private _RemoteIP As String = "127.0.0.1"
Private _LocalPort As Integer = 80
Private _RemotePort As Integer = 80
Private _State As WinsockStates = WinsockStates.Closed
Private _sBuffer As String
Private _buffer() As Byte
Private _bufferCol As Collection
Private _byteBuffer(1024) As Byte
Private _sockList As Socket
Private _Client As Socket
#End Region
#Region " Constructors "
Public Sub New()
Me.New(80)
End Sub
Public Sub New(ByVal Port As Long)
Me.New("127.0.0.1", Port)
End Sub
Public Sub New(ByVal IP As String)
Me.New(IP, 80)
End Sub
Public Sub New(ByVal IP As String, ByVal Port As Long)
RemoteIP = IP
RemotePort = Port
LocalPort = Port
_bufferCol = New Collection
End Sub
#End Region
#Region " Properties "
Public Property LocalPort() As Integer
Get
Return _LocalPort
End Get
Set(ByVal Value As Integer)
If GetState = WinsockStates.Closed Then
_LocalPort = Value
Else
Throw New Exception("Must be idle to change the local port")
End If
End Set
End Property
Public Property RemotePort() As Integer
Get
Return _RemotePort
End Get
Set(ByVal Value As Integer)
If GetState <> WinsockStates.Connected Then
_RemotePort = Value
Else
Throw New Exception("Can't be connected to a server and change" & _
"the remote port.")
End If
End Set
End Property
Public Property RemoteIP() As String
Get
Return _RemoteIP
End Get
Set(ByVal Value As String)
If GetState = WinsockStates.Closed Then
_RemoteIP = Value
Else
Throw New Exception("Must be closed to set the remote ip.")
End If
End Set
End Property
<Browsable(False)> Public ReadOnly Property GetState() As WinsockStates
Get
Return _State
End Get
End Property
#End Region Teil3 folgt | |
Re: Pc's Verbinden mittels System.Net.Sockets Teil3 | | | Autor: dj.tommy | Datum: 23.09.15 10:01 |
| #Region " Methods "
Public Sub Listen()
Dim x As New System.Threading.Thread(AddressOf DoListen)
x.Start()
End Sub
Public Sub Close()
Try
Select Case GetState
Case WinsockStates.Listening
ChangeState(WinsockStates.Closing)
_sockList.Close()
Case WinsockStates.Connected, WinsockStates.Connecting, _
WinsockStates.ConnectionPending, WinsockStates.HostResolved, _
WinsockStates.Open, WinsockStates.ResolvingHost
ChangeState(WinsockStates.Closing)
_Client.Close()
Case WinsockStates.Closed
'do nothing
End Select
ChangeState(WinsockStates.Closed)
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Public Sub Accept(ByVal requestID As Socket)
Try
ChangeState(WinsockStates.ConnectionPending)
_Client = requestID
RaiseEvent Connected(Me)
ChangeState(WinsockStates.Connected)
_Client.BeginReceive(_byteBuffer, 0, 1024, SocketFlags.None, _
AddressOf DoStreamReceive, Nothing)
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Public Sub Connect()
If GetState = WinsockStates.Connected Or GetState = _
WinsockStates.Listening Then
RaiseEvent HandleError(Me, "Already open, must be closed first", _
"Connect", "Nothing here")
Exit Sub
End If
Try
Dim remIP As String = ""
ChangeState(WinsockStates.ResolvingHost)
Try
Dim x As System.Net.IPAddress
x = IPAddress.Parse(_RemoteIP)
remIP = x.ToString
Catch ex1 As Exception
'not a valid IP address - resolve DNS
Try
Dim ip As IPHostEntry = Dns.GetHostEntry(_RemoteIP)
Dim t() As IPAddress = ip.AddressList
remIP = t(0).ToString
Catch ex2 As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex2.Message, _
ex2.TargetSite.Name, ex2.ToString)
End Try
End Try
ChangeState(WinsockStates.HostResolved)
_Client = New Socket(AddressFamily.InterNetwork, SocketType.Stream, _
ProtocolType.Tcp)
Dim rEP As New IPEndPoint(IPAddress.Parse(remIP), RemotePort)
'_Client.Connect(rEP)
ChangeState(WinsockStates.Connecting)
_Client.BeginConnect(rEP, New AsyncCallback(AddressOf OnConnected), _
Nothing)
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Public Sub Connect(ByVal IP As String, ByVal Port As Integer)
RemoteIP = IP
RemotePort = Port
Connect()
End Sub
#End Region
Teil4 folgt | |
Re: Pc's Verbinden mittels System.Net.Sockets Teil4 | | | Autor: dj.tommy | Datum: 23.09.15 10:02 |
| #Region " Public Functions/Subs "
Public Function LocalIP() As String
Dim h As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry( _
System.Net.Dns.GetHostName)
Return CType(h.AddressList.GetValue(0), Net.IPAddress).ToString
End Function
Public Function RemoteHostIP() As String
Dim iEP As IPEndPoint = _Client.RemoteEndPoint
Return iEP.Address.ToString
End Function
#End Region
#Region " Send Overloads "
Public Sub Send(ByVal Data As String)
Dim sendBytes() As Byte = System.Text.Encoding.ASCII.GetBytes(Data)
Me.Send(sendBytes)
End Sub
Public Sub Send(ByVal Data() As Byte)
Select Case GetState
Case WinsockStates.Closed
'can't send - not connected
Case WinsockStates.Listening
'listening
Case WinsockStates.Connected
Try
'send the bytes that are passed
ReDim Preserve Data(UBound(Data) + 1)
Data(UBound(Data)) = 4
_Client.Send(Data)
Catch ex As Exception
Me.Close()
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Select
End Sub
Public Sub Send(ByVal Data As Bitmap)
Dim str As New System.IO.MemoryStream
Data.Save(str, System.Drawing.Imaging.ImageFormat.Bmp)
Dim sendBytes(str.Length - 1) As Byte
str.Position = 0
str.Read(sendBytes, 0, str.Length)
Me.Send(sendBytes)
End Sub
#End Region
#Region " GetData Overloads "
Public Sub GetData(ByRef data As String)
Dim byt() As Byte = Nothing
GetData(byt)
For i As Integer = 0 To UBound(byt)
If byt(i) = 10 Then
data &= vbLf
Else
data &= ChrW(byt(i))
End If
Next
End Sub
Public Sub GetData(ByRef bytes() As Byte)
If _bufferCol.Count = 0 Then Throw New IndexOutOfRangeException( _
"Nothing in buffer.")
Dim byt() As Byte = Me._bufferCol.Item(1)
_bufferCol.Remove(1)
ReDim bytes(UBound(byt))
byt.CopyTo(bytes, 0)
End Sub
Public Sub GetData(ByRef bitmap As Bitmap)
Dim byt() As Byte = Nothing
GetData(byt)
Dim str As New System.IO.MemoryStream(byt, False)
bitmap = bitmap.FromStream(str)
End Sub
#End Region Teil5 folgt | |
Re: Pc's Verbinden mittels System.Net.Sockets Teil6 | | | Autor: dj.tommy | Datum: 23.09.15 10:05 |
| Private Sub DoRead(ByVal ar As IAsyncResult)
Dim intCount As Integer
Try
intCount = _Client.EndReceive(ar)
If intCount < 1 Then
Me.Close()
ReDim _byteBuffer(1024)
RaiseEvent Disconnected(Me)
Exit Sub
End If
AddToBuffer(_byteBuffer, intCount)
'BuildString(_byteBuffer, 0, intCount)
Array.Clear(_byteBuffer, 0, intCount)
_Client.BeginReceive(_byteBuffer, 0, 1024, SocketFlags.None, _
AddressOf DoRead, Nothing)
Catch ex As Exception
Me.Close()
ReDim _byteBuffer(1024)
RaiseEvent Disconnected(Me)
End Try
End Sub
Private Sub BuildString(ByVal Bytes() As Byte, ByVal offset As Integer, _
ByVal count As Integer)
Try
Dim intIndex As Integer
For intIndex = offset To offset + count - 1
If Bytes(intIndex) = 10 Then
_sBuffer &= vbLf
Else
_sBuffer &= ChrW(Bytes(intIndex))
End If
Next
If _sBuffer.IndexOf(vbCrLf) <> -1 Then
RaiseEvent DataArrival(Me, count)
_byteBuffer.SetValue(_byteBuffer, 0, _byteBuffer.Length)
End If
Catch ex As Exception
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Private Sub AddToBuffer(ByVal bytes() As Byte, ByVal count As Integer)
Dim curUB As Integer
If Not _buffer Is Nothing Then curUB = UBound(_buffer) Else curUB = -1
Dim newUB As Integer = curUB + count
ReDim Preserve _buffer(newUB)
Array.Copy(bytes, 0, _buffer, curUB + 1, count)
Dim byterm As Byte = 4
Dim idx As Integer = Array.IndexOf(_buffer, byterm)
Dim byObj() As Byte
Dim byTmp() As Byte
While idx <> -1
'found an EOT (end of transmission) marker split it if necessary and
'put it in the buffer to get - call DataArrival
Dim ln As Integer = _buffer.Length - (idx + 1)
ReDim byObj(idx - 1)
ReDim byTmp(ln - 1)
Array.Copy(_buffer, 0, byObj, 0, idx)
Array.Copy(_buffer, idx + 1, byTmp, 0, ln)
ReDim _buffer(UBound(byTmp))
Array.Copy(byTmp, _buffer, byTmp.Length)
Me._bufferCol.Add(byObj)
RaiseEvent DataArrival(Me, byObj.Length)
idx = Array.IndexOf(_buffer, byterm)
End While
If count < bytes.Length - 1 And _buffer.Length > 0 Then
_bufferCol.Add(_buffer)
RaiseEvent DataArrival(Me, _buffer.Length)
_buffer = Nothing
End If
End Sub
#End Region
End Class
#Region " Enumerations "
Public Enum WinsockStates
Closed = 0
Open = 1
Listening = 2
ConnectionPending = 3
ResolvingHost = 4
HostResolved = 5
Connecting = 6
Connected = 7
Closing = 8
[Error] = 9
'Listening = 1
'Connected = 2
End Enum
#End Region | |
Glaube den grund gefunden zuhaben | | | Autor: dj.tommy | Datum: 24.09.15 17:34 |
| Hallo Leute!
Das Projekt was ich gefunden habe unter
http://www.codeproject.com/Articles/11422/Winsock-NET
Ist im diesem Beispiel so geschrieben:
Private Sub Winsock3_DataArrival(ByVal sender As Winsock_Control.Winsock, ByVal _
BytesTotal As Integer) Handles Winsock3.DataArrival
Dim s As String
Winsock3.GetData(s)
MsgBox(s)'<<<<Mit einem MsgBox
End Sub Und in meinem Projekt:
Private Sub Winsock3_DataArrival(sender As Winsock_Control.Winsock, _
BytesTotal As Integer) Handles Winsock3.DataArrival
Dim Buffer As String = ""
Winsock3.GetData(Buffer)
TextBox1.Text =Buffer '<<<<< Mit einem TextBox
End Sub Meine Vermutung ist das ich in mit dem Steuerelement Textbox threadübergreife und daher der Fehler
wenn, ich es wieder mit MsgBox teste funktioniert es wieder.
Wie stelle ich es an, das ich die Daten von GetData, die in einem Winsock3_DataArrival-Prozedur befindet auslesen kann, ohne das ich threadübergreife ?
| |
Re: Glaube den grund gefunden zuhaben | | | Autor: FZelle (Moderator) | Datum: 24.09.15 18:12 |
| Wenn du Threadübergreifend in diese Suche eingibst ( 30 Tage umstellen nicht vergessen ) dann bekommst du haufenweise antworten.
Aber das suchen hier solltest du nach 10 Jahren im Forum doch langsam können.
Aber ganz abgesehen davon, eine VB6 (und damit 15 Jahre veraltetet) Technik auszugraben um etwas heute zu machen ist nicht wirklich gut. | |
Re: Glaube den grund gefunden zuhaben | | | Autor: dj.tommy | Datum: 24.09.15 19:03 |
| Hallo FZelle !
ich habe im google danach gesucht aber komme leider nicht auf einen grünen Zweig Und ja ich weiß das Vb6 nicht vb.net ist, und ich weiß auch das ich manchmal nicht ganz von Vb6 weg komme.
Einerseits war vb6 leicht aber eingeschränkt, was unter vb.net wieder besser ist weil man viel mehr Möglichkeiten hat. Aber ich finde es nur schade das unter vb.net in diesem Fall gibt es kein fertiges Steuerelement Aber der Grund ist der, das ich nur selbst angelernter Hobby Programmierer bin, und keine Programmierschule besucht habe, und somit mich nicht wirklich mit Programmiertechnik auskenne, sondern eher oberflächlich.
Ich habe schon viel damit beschäftigt, und habe schon viel programmiert. Und ehrlich gesagt gefällt es mir auch und habe Spaß daran.
Ich habe Stunden lang nach Netzwerk Verbindung gesucht, zu Beispiel nach vb.net chat oder nach Tcp/Ip gesucht, und ich habe auch was gefunden keine frage.
Aber leider nichts mit dem ich was anfangen kann, weil es mir eindeutig zu hoch ist Ich suche eigentlich ein simple Codes wo ich ein Server und mehrere Clienten verbinden kann.
Ps: sollte ich nervig sein, dann bitte es mir sagen und ich werde keine Fragen in diesem Forum mehr stellen.
| |
Re: Glaube den grund gefunden zuhaben | | | Autor: FZelle (Moderator) | Datum: 24.09.15 23:31 |
| Das hat mit nervig nichts zu tun, aber wie gesagt das Wort "threadübergreifender" hier in die Suche
eingegeben, bekommst du 5 Seiten a 25 Postings dazu.
Eines der ersten ist http://www.vbarchiv.net/forum/id22_i94910t94910_threaduebergreifende-verwendung-von-steuerelementen.html
Zitat: | | Aber leider nichts mit dem ich was anfangen kann, weil es mir eindeutig zu hoch ist | |
Das bedeutet nur, das du dich bisher nur mit Snippets beschäftigt hast.
Du solltest mal die Grundlagen wirklich erlesen, das ist zwar manchmal ( meistens ) langweilig aber dann versteht man mit einem mal was man macht und rennt nicht ständig gegen Wände.
Zitat: | | Ich suche eigentlich ein simple Codes wo ich ein Server und mehrere Clienten verbinden kann. | |
Netzwerkprogrammierung und damit auch Multitasking ist etwas was wirklich Grundlagen wissen erfordert.
Aber MS hat mit der microsoftvirtualacademy eine gute Anlaufstelle.
Client/Server ist auch soetwas, was soll das werden?
Sowas wie Chat oder ein Datenbankservice?
Chat wäre mit SignalR zu machen, DB Service mit WebApi zu machen. | |
Re: Glaube den grund gefunden zuhaben | | | Autor: dj.tommy | Datum: 25.09.15 00:37 |
| Hallo FZelle !
ich habe mir ein Spiel gebastelt, und damit man mit 2 oder mehre pc's miteinander spielen kann möchte ich sie gerne verbinden.
Indem ich die Spielinformation von jeden Spieler über Netzwerk sende.
Ich versuche auch die Grundlagen zu lesen beziehungsweise zu verstehen.
Aber es wird oft und vor allem unter MSN Seiten nur kurz und bündig erklärt, und manchmal mit Fachbegriffe um sich geworfen, so dass ein normaler Mensch wie ich nur ? um sich hat.
Und eine Programmierschule zu besuchen, habe ich mir auch schon Gedanken gemacht. Nur die sind gerade nicht wirklich leistbar.
Ich habe mir Seite angesehen z.B. 990 € für 2 Tage was bitte soll ich da lernen also das was ich dort lerne kann ich groß teils selber schon.
Wenn, ich noch tiefer in die Programmiertechnik erfahren will brauch ich zeit und viel Geld die ich nicht habe.
Ich hoffe das ich dich jetzt nicht zu getextet habe.
Ich wollte nur das du mich ein wenig verstehst.
| |
Re: Glaube den grund gefunden zuhaben | | | Autor: sv00010 | Datum: 25.09.15 05:51 |
| Suche mal nach Delegate. 0 | |
Re: Glaube den grund gefunden zuhaben | | | Autor: FZelle (Moderator) | Datum: 26.09.15 17:20 |
| Zitat: | | Aber es wird oft und vor allem unter MSN Seiten nur kurz und bündig erklärt, und manchmal mit Fachbegriffe um sich geworfen, so dass ein normaler Mensch wie ich nur ? um sich hat. | |
Das beides bedeutet das du immer nur nach Snippets suchst und nicht nach ganzen Tutorials.
Zitat: | | Wenn, ich noch tiefer in die Programmiertechnik erfahren will brauch ich zeit und viel Geld die ich nicht habe | |
Geld brauchst du nicht, es gibt genug Online Material das man legal Kostenlos bekommen kann, z.b.
auf codeproject.com oder microsoftvirtualacademy.com , aber Zeit wirst du wohl mitbringen müssen, denn lernen kostet immer Zeit.
Zitat: | | Ich wollte nur das du mich ein wenig verstehst. | |
Ich verstehe das schon, wie die meisten Hobbyprogrammierer bist du recht "schnell" losgekommen und glaubst dann das Programmieren ja nicht soo schwer ist.
Wenn du dann aber auf Schwierigkeiten triffst, meinst du das das mal eben aus der Welt zu schaffen ist.
Was glaubst du, warum man Jahre lang studieren muss oder Jahrzehnte Erfahrung am Job haben muss um komplexe Systeme zu erstellen?
Also auch wenn es dir schwer fällt es zu glauben, du musst die Grundlagen lernen.
Aber ich habe dir ja schon 2 Links zu exact diesem Thema gegeben | |
Re: Glaube den grund gefunden zuhaben | | | Autor: dj.tommy | Datum: 26.09.15 23:59 |
| Hallo sv00010 und FZelle !
ich habe mir Delegate und Invoke mal angesehen.
Nur Invoke funktioniert nur unter Formular was ich bis jetzt erfahren habe.
Ich würde gerne Client und Server im Komponenten erstellen und dies im Formular einbinden oder als Code deklarieren.
Es ist alles fertig, nur das blöde ist der Empfang, ich kann ihn nicht weiterleiten kann, weil eben dieser Fehler entsteht
und die Verbindung geschlossen wird.
Also unter Formular funktioniert es mittels Invoke
kann ich es irgendwie unter Komponente machen?
Ich meine ich habe mich seit letzten tage einiges gelesen und getestet.
Ich habe erfahren das so endlich Invoke unter Komponente gibt mittels System.ComponentModel.ISynchronizeInvoke
habe ich auch eingebaut und getestet, nur die variable hatte Nothing
habe weiter erforscht und erfahren das ich dieses teil brauche, damit die Variable in Instanz gesetzt wird.
<System.ComponentModel.Browsable(False)> _
Public Property SyncObject() As
System.ComponentModel.ISynchronizeInvoke
Get
If _syncObject Is Nothing And Me.DesignMode Then
Dim designer As IDesignerHost =
Me.GetService(GetType(IDesignerHost))
If Not (designer Is Nothing) Then
_syncObject = designer.RootComponent
End If
End If
Return _syncObject
End Get
Set(ByVal Value As System.ComponentModel.ISynchronizeInvoke)
If Not Me.DesignMode Then
If Not (_syncObject Is Nothing) And Not (_syncObject
Is Value) Then
Throw New Exception("Property can not be set at
run-time")
Else
_syncObject = Value
End If
End If
End Set
End Property Juhhu es funktioniert :-D
Oder doch nicht
Nein denn der Server geht nicht, weil ich den Server-Komponente nicht auf Formular gelegt habe, so das der obere Code teil "ich sage mal" nicht angesprochen wird, sondern als Code deklariert.
Ich habe weiter erforscht aber bis heute noch nichts gefunden, wie ich das Problem beheben kann.
Könntet ich vielleicht ein weg weisen ? warum ich möchte das?!
Weil es soll funktionieren egal ob man es als Code deklariert, oder in einem Formular einbindet.
Ich sage wenn man was macht das mach es richtig oder gar nicht
Mfg DjTommy | |
| 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 |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|