Hi!
Ich hab eine Funktion die mir ein DataTable zurück geben soll..leider kommt immer "Nothing" bei raus..die Schreibfunktion funktioniert!
Spoiler anzeigen
dt_MainTable = DataTable_Tools.ReadDataTable(DT_MainTable_DateiName)
Ich hab eine Funktion die mir ein DataTable zurück geben soll..leider kommt immer "Nothing" bei raus..die Schreibfunktion funktioniert!
VB.NET-Quellcode
- Public Class DataTable_Tools
- Public Shared Async Sub SaveDataTable(FileName As String, _DataTable As DataTable)
- Await Task.Run(Sub()
- DataTable_Tools.File_WaitReadWriteReady(FileName, False)
- End Sub).ContinueWith(Sub()
- DataTable_Tools.Save_DataTable_ToFile(_DataTable, FileName)
- End Sub)
- End Sub
- Public Shared Function ReadDataTable(FileName As String) As DataTable
- Task.Run(Sub()
- DataTable_Tools.File_WaitReadWriteReady(FileName, True)
- End Sub).ContinueWith(Function()
- Return DataTable_Tools.Load_DataTable_FromFile(FileName).Copy
- End Function)
- End Function
- Public Shared Sub File_WaitReadWriteReady(ByVal fileName As String, ByVal Read As Boolean)
- While True
- Try
- If Read Then
- Using stream As FileStream = New FileStream(fileName, IO.FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read)
- If stream IsNot Nothing Then
- Trace.WriteLine("Output file ready.")
- stream.Close()
- Exit While
- End If
- End Using
- Else
- Using stream As FileStream = New FileStream(fileName, IO.FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)
- If stream IsNot Nothing Then
- Trace.WriteLine("Output file ready.")
- stream.Close()
- Exit While
- End If
- End Using
- End If
- Catch ex As FileNotFoundException
- Trace.WriteLine(String.Format("Output file {0} not yet ready ({1})", fileName, ex.Message))
- Catch ex As IOException
- Trace.WriteLine(String.Format("Output file {0} not yet ready ({1})", fileName, ex.Message))
- Catch ex As UnauthorizedAccessException
- Trace.WriteLine(String.Format("Output file {0} not yet ready ({1})", fileName, ex.Message))
- Catch ex As Exception
- Trace.WriteLine(ex.Message)
- End Try
- Application.DoEvents()
- Thread.Sleep(50)
- End While
- End Sub
- Public Shared Function Save_DataTable_ToFile(ByVal Table As DataTable, ByVal FileName As String) As Boolean
- Try
- Using stream = New MemoryStream()
- Dim formatter As IFormatter = New BinaryFormatter()
- formatter.Serialize(stream, Table)
- stream.Close()
- Using _stream As FileStream = New FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)
- _stream.Write(stream.ToArray, 0, stream.ToArray.Length)
- End Using
- End Using
- Return True
- Catch ex As Exception
- Debug.WriteLine(ex.Message)
- Return False
- End Try
- End Function
- Public Shared Function Load_DataTable_FromFile(ByVal FileName As String) As DataTable
- Try
- Using _stream As FileStream = New FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
- Dim formatter As IFormatter = New BinaryFormatter()
- Return CType(formatter.Deserialize(_stream), DataTable)
- End Using
- Catch ex As Exception
- Debug.WriteLine(ex.Message)
- Return Nothing
- End Try
- End Function
- End Class
dt_MainTable = DataTable_Tools.ReadDataTable(DT_MainTable_DateiName)