Methode in nächsten Thread starten

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Telcrome.

    Methode in nächsten Thread starten

    Wie in der Überschrift schon gesagt, versuche ich gerade in WinRT Apps eine Methode außerhalb des UI-Threads zu starten.
    Bei der andauernden Operation handelt es sich um einen Download, der zwar schon mit

    VB.NET-Quellcode

    1. myClient.GetByteArrayAsync(Link).Result

    aufgerufen wird, also asynchron.
    Hilft aber alles nichts und die App hängt sich für 1min während des Downloads auf und läuft danach weiter.

    Wie starte ich jetzt die Downloadmethode in einem anderen Thread bzw. Asynchron?
    Schreibe deine auszuführende "Arbeit" in einem externen Sub, beispielsweise als "Sub DoAsynchron()" und machs so:

    VB.NET-Quellcode

    1. Dim tDoAsynchron As New System.Threading.Thread(AddressOf DoAsynchron)tDoAsynchron.Start


    Du sagst halt das du einen neuen Thread erstellst, mit der Adresse von deinem DoAsynchron() Sub, anschließend startest du ihn.
    Alternativ könntest du noch einen BackgroundWorker nehmen.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Hmm ich selber hab mich noch nie mit WinRT beschäftigt, aber da die warscheinlich (hoffentlich) auch das normale Windows Framework und dessen Funktionen nutzen, müsste man die doch auch importieren können. Oder nicht xD!?
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Okay also es hat jetzt ähnlich funktioniert. Muss zugeben hab auch bei Win Forms noch nie mit Threads gearbeitet.
    So hab ich jetzt den anderen Thread aufgerufen:
    Die Methode:

    VB.NET-Quellcode

    1. Public Async Sub Methodenname(timer As Windows.System.Threading.ThreadPoolTimer)

    Der Aufruf:

    VB.NET-Quellcode

    1. Windows.System.Threading.ThreadPoolTimer.CreateTimer(AddressOf VideoDownloadenAndererThread, New TimeSpan(1))

    Und die Deklaration des ThreadpoolTimers:

    VB.NET-Quellcode

    1. Dim WithEvents myTimer As Windows.System.Threading.ThreadPoolTimer


    Jetzt habe ich glaube ich nur leider ein ganz gewöhnliches Problem für Threads: Ich kann nicht auf die Steuerelemente aus dem UI-Thread zugreifen.
    Fehlermeldung:

    Quellcode

    1. Eine Schnittstelle, die für einen anderen Thread marshalled war, wurde von der Anwendung aufgerufen. (Ausnahme von HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
    @picoflop
    Okay, hab das mal umgesetzt und eine neue Fehlermeldung erhalten: (man kennt das ja, die Zeile wird grün und dann steht das da dran)

    Quellcode

    1. Response status code does not indicate success: 403 (Forbidden).

    Das hier hab ich jetzt mal versucht:

    VB.NET-Quellcode

    1. Dim myByteArray() As Byte = Await myClient.GetByteArrayAsync(Link)


    Hab ich jetzt was öffentliches falsch gemacht oder muss ich mich nochmal auf die Suche begeben? :whistling:
    @picoflop
    Hab ich mir auch gedacht, als ich einfach nach dem Error gesucht habe. Dachte mir nur, da es gestern noch funktioniert hat kann ich das ja mal ausschließen. ^^

    EDIT: Also ich werd entweder Theologe oder Informatiker. Bei beidem kann ich nur den Willen einer höheren Macht deuten. Jetzt geht's auf einmal, ich hab nichts geändert...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Telcrome“ ()