Thread and DataGrid
Programmet skal sende et tal fra en client til denne server, når der trykkes på en knap. Dette virker hvis jeg nøjes med at bruge en ListBox, men ikke hvis jeg vil have det over i et DataGrid?Er der nogen der kender en løsning på dette problem?
Her er koden, det som er markeret med *** er det som får programmet til at gå ned når det har modtaget 100 tal fra clienten, samtidig gør det også det at der kommer to scrollbarene i datagrid'en en gang i mellem. Button2 tilføjer også data til datagriden på samme måde (bare fra serveren) uden at det går galt:
Friend WithEvents TimeData As Listen ' Prepare for the event-handler
Friend DT As System.Data.DataTable
Friend DS As System.Data.DataSet
Public Nr As Integer = 1
Class Listen
Public Event TimeDataReady(ByVal data As String)
Public Sub WaitForConnectAndAccept()
Dim server As TcpListener = New TcpListener(IPAddress.Any, 1234)
server.Start()
Dim client As TcpClient = server.AcceptTcpClient
Dim rdr As StreamReader = New StreamReader client.GetStream)
Dim line As String = rdr.ReadLine
rdr.Close()
client.Close()
server.Stop()
RaiseEvent TimeDataReady(line)
End Sub
End Class
Function CreateDataTable(ByVal TableName As String) As DataTable...
Sub ReceivedTime(ByVal data As String) Handles TimeData.TimeDataReady
ListBox1.Items.Add(Nr)
'*************************************
'* Dim DR As DataRow = DT.NewRow
'* DR("kommentar") = Nr
'* DT.Rows.Add(DR)
'*************************************
Nr = Nr + 1
TimeData = New Listen
Call (New Thread(New ThreadStart(AddressOf TimeData.WaitForConnectAndAccept))).Start()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
DT = CreateDataTable("AllData")
DS = New DataSet("regi")
DS.Tables.Add(DT)
DataGrid1.SetDataBinding(DS, "AllData")
TimeData = New Listen
Call (New Thread(New ThreadStart(AddressOf TimeData.WaitForConnectAndAccept))).Start()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox1.Items.Add(Nr)
Dim DR As DataRow = DT.NewRow
DR("kommentar") = Nr
Nr = Nr + 1
DT.Rows.Add(DR)
End Sub
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Application.Exit()
Environment.Exit(0)
End Sub
Jeg troede jeg havde styr på det man det er svært at finde en fejl som først opstår efter 100 forsendelser. Jeg vil formode at det har noget med en stack at gøre (el. lign.) men kan ikke se fejlen.
