Option Strict On und Threads

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Trudi.

    Option Strict On und Threads

    Hi,

    ich entwickle derzeit etwas was auf Threads zugreifen soll und habe Option Strict On angestellt.
    Folgender Fehler tritt auf :

    Fehler schrieb:


    "Option Strict On" erlaubt keine Einschränkungen in impliziten Typkonvertierungen zwischen der Private Sub searchfilesindir(d As System.IO.DirectoryInfo)-Methode und dem Delegaten "Delegate Sub ParameterizedThreadStart(obj As Object)".


    Mein Code :

    VB.NET-Quellcode

    1. Public Sub StartSearchAsync()
    2. For Each d As DirectoryInfo In mMainDir.GetDirectories
    3. Dim ts As New ParameterizedThreadStart(AddressOf searchfilesindir)
    4. Dim t As New Thread(ts)
    5. t.Start(d)
    6. Next
    7. End Sub
    8. Private Sub searchfilesindir(ByVal d As DirectoryInfo)
    9. ' [...]
    10. End Sub


    Wie kann ich den Fehler beheben ?
    Ohne Option Strict On besteht der Fehler nicht.

    Gruß, Trudi
    Ändere Private Sub searchfilesindir(ByVal d As DirectoryInfo)
    in Private Sub searchfilesindir(ByVal d As Object)

    Dem ParameterizedThreadStart wird ein Object übergeben.
    ... Dieses Verfahren ist jedoch nicht typsicher, da jedes beliebige Objekt an Thread.Start(Object) übergeben werden kann. ...

    So gerne ich Lösungen erkläre: hier muss ich passen, da ich keine Erklärung zusammenbringe die man verstehen kann. :)
    Danke es klappt :)

    Aber ich muss dann jedes mal das object wieder in directoryinfo umwandeln..
    Das geht dann bestimmt auf die Performance von meinem Programm.

    der_Kurt schrieb:

    So gerne ich Lösungen erkläre: hier muss ich passen, da ich keine Erklärung zusammenbringe die man verstehen kann.

    Typisch Threads .. :D

    Gruß, Trudi
    DirectCast funktioniert doch nur, wenn das eine Objekt vom anderen erbt.
    Da dies funktioniert, erbt DirectoryInfo folglich von Object :

    VB.NET-Quellcode

    1. Private Sub searchfilesindir(ByVal o As Object)
    2. Dim d As DirectoryInfo = DirectCast(o, DirectoryInfo)
    3. End Sub


    Oder sollte ich lieber CType nehmen ?

    Gruß, Trudi

    SeriTools schrieb:

    Hey - ALLES erbt (direkt oder indirekt) von System.Object .

    lg SeriTools


    und wieder was dazu gelernt :D ..

    Kangaroo schrieb:

    hmm, wie heisst es so schön auch in .NET (Nearly) Everything is an Object , Du kannst auf jeden Fall DirectCast verwenden.

    Interface Typen erben zum Beispiel nicht von System.Object sind aber konvertierbar ...


    Ok, dann bleib ich jetzt bei DirectCast, weils schneller ist ..

    Eine Frage hab ich noch :

    Ich gehe ( wie man vielleicht schon erkannt hat ) Verzeichnisse durch.
    Also könnte es vorkommen, dass ca. 20 Threads ( oder mehr) gleichzeitig am laufen sind.

    Sollte ich da nicht lieber einen ThreadPool nehmen ? ( startet schneller )

    Gruß, Trudi