Ich benutze VB.Net 2010. Ich habe eine Funktion, die eine Datenbank auf Anfragen überprüft und einige der Anfragen können einige Minuten dauern. Ich möchte nicht, dass es während der Verarbeitung von Anforderungen in die Warteschlange gestellt wird. Daher möchte ich dynamisch neue Threads erstellen, um jede neue Anforderung auszuführen, sodass sie gleichzeitig ausgeführt werden können. Ich war mir nicht sicher, ob ich Threads, Threadpools, Hintergrundarbeiter oder etwas anderes verwenden sollte. Irgendwelche Vorschläge und Beispielcode wären großartig. Ich kann mit einem einfachen Beispiel arbeiten. Das ist alles was ich bisher habe.Brauchen Sie Hilfe beim dynamischen Erstellen von Threads in VB.Net
Vielen Dank.
Imports System.Threading
Module Module1
Private trd As Thread
Sub Main()
'START THREAD
trd = New Thread(AddressOf command_loop)
trd.IsBackground = True
trd.Start()
Console.ReadLine()
End Sub
Function command_loop()
'CREATE EXPORT FILE
Try
Dim f As FileInfo
Dim export As System.IO.StreamWriter
Dim arr_comment
'DELETE OLD EXPORT FILE
If File.Exists(export_path) Then
File.Delete(export_path)
End If
'VERIFY OLD EXPORT FILE WAS DELETED
If File.Exists(export_path) Then
writeToLog("ERROR: Old export file for " & username & " was not able to be deleted")
End If
'GET USER FOLDER CRC
Dim di As New DirectoryInfo(user_folder)
Dim fiArr As FileInfo() = di.GetFiles()
export = My.Computer.FileSystem.OpenTextFileWriter(export_path, True)
export.WriteLine("filepath, size, esize, date_mod_timestamp, timestamp, remote_filename, filestatus")
For Each f In fiArr
Try
Using zip As ZipFile = ZipFile.Read(user_folder & "\" & f.Name)
For Each e As ZipEntry In zip
If (zip.Comment IsNot Nothing) AndAlso (zip.Comment <> "") Then
arr_comment = Split(zip.Comment, ":")
End If
If arr_comment.length <> 3 Then
'FILE HAS AN INVALID COMMENT, SO DELETE IT.
zip.Dispose()
Try
writeToLog("Invalid zip file comment, deleting file " & user_folder & "\" & f.Name)
File.Delete(user_folder & "\" & f.Name)
writeToLog("Zip file successfully deleted")
Catch exx As Exception
writeToLog("Unable to delete invalid zip file")
writeToLog(exx.Message)
End Try
Continue For
End If
'CORRECT FILE PATH
Dim filepath = Replace(e.FileName, "/", "\\")
export.WriteLine(Chr(34) & filepath & Chr(34) & "," & e.UncompressedSize & "," & e.CompressedSize & "," & arr_comment(1) & "," & arr_comment(2) & "," & f.Name & "," & arr_comment(0))
Exit For
Next
End Using
Catch ex As IOException
Console.WriteLine(ex.Message)
Catch ex As ZipException
Console.WriteLine(ex.Message)
Try
writeToLog("Invalid zip file, deleting file " & user_folder & "\" & f.Name)
File.Delete(user_folder & "\" & f.Name)
writeToLog("Zip file successfully delete")
Catch e As Exception
writeToLog("Unable to delete invalid zip file")
writeToLog(e.Message)
End Try
End Try
Next f
export.Close()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Function
End Module
Diese Frage ist zu breit. Sie müssen eingrenzen, was Sie tun, und eine bestimmte Frage stellen. Zum Beispiel kann der Code in der Methode "DO SOMETHING" großen Einfluss auf die richtige Lösung haben. – Enigmativity
sollten Sie alle oben genannten + 'Task.Run' verwenden. Aber es hängt wirklich vom Endziel ab –
Hier ist der Code, der in die Threads geladen werden muss. – rerat