BitmapImage immer im Besitz von einem Thread...

  • WPF

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von EugenIS.

    EugenIS schrieb:

    Was ich ganz ganz toll finde, man erzählt mir hier, vergiss dies vergiss das, und selbst ist man nicht in der Lage eine einfache Klasse mit einem Construktor und einem asynchronen Aufruf mir zu zeigen.

    Ja, selbst nimmt sich sich NIE an der Nase. Immer erst vor der eigenen Türe kehren.

    Dann hol ich mal aus:

    1.) Der ThreadTitel lässt was ganz anderes Ahnen und deine Codesnippets zeigen nicht wirklich auf was du hinaus will, was denkst du warum niemand Antwortet. Dein letzter Code schon eher. Nach 19 Posts. Toll!!!
    Aber klar, die anderen dafür verantwortlich machen ist leichter. Übrigens: Wir machen das alle in unserer Freizeit und enentgeltlich. Nur so als Gedanke.
    2.) Habe ich dir einen Link gepostet . Leider warst du nicht im Stande diese eine einzige Seite zu lesen und zu verstehen (welche sogar in C# ist).
    Denn.... hättest du diese gelesen wüsstest du auch wo dein Fehler vermutlich liegt. Denn du meintest ja du hättest es mit Async Wait ja nun versucht. Allerdings nicht nach diesem Artikel. Ich zitiere mal aus dem Artikel.
    Spoiler anzeigen

    Beim Einsatz von async und await sind aber weitere Regeln zu beachten. Einsprungpunkte (main()-Routinen) sowie Methoden mit ref- und out-Parametern dürfen nicht mit async gekennzeichnet werden. Ebenso dürfen solche Methoden nicht mit [SecurityCritical] und [SecuritySafeCritical] oder [MethodImpl(MethodImplOptions.Synchronized)] annotiert sein. await
    ist nicht in Getter- oder Setter-Routinen von Properties, in
    lock/SyncLock-Blöcken sowie in catch-, finally- und unsafe-Codeblöcken
    gestattet.

    Das problem kann "umgangen" werden, wenn man es versteht!!


    Zu guter letzt habe ich jetzt nur rein anhand dieses Artikels ein Beispiel geschrieben (innerhalb von 3 Minuten) welche veranschaulicht wie Async/Await funzt.
    Ich wollte dir das nicht vorsetzen sondern sollte dir einen schubbser in die richtige Richtung geben damit du etwas daraus lernst, wenn du allerdings nicht willst, dann hat zumindest vieleicht wer anderer was davon.

    Folgendes Programm:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks
    2. Module Module1
    3. Sub Main()
    4. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "Constructor called...")
    5. CallAsync()
    6. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "Constructor finished")
    7. Console.ReadLine()
    8. End Sub
    9. Public Async Sub CallAsync()
    10. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "CallAsync start")
    11. Await DoOperationAsync()
    12. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "CallAsync ends")
    13. End Sub
    14. Public Async Function DoOperationAsync() As Task(Of Boolean)
    15. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "Start Async operation...")
    16. Dim task = New Task(Of Boolean)(Function() MyLongOperationFunktion())
    17. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "Have initiated the Task")
    18. task.Start()
    19. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "Task has started")
    20. Dim ret = Await task
    21. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "Task was finished!")
    22. Return ret
    23. End Function
    24. Public Function MyLongOperationFunktion() As Boolean
    25. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "TASK: STARTING")
    26. Threading.Thread.Sleep(5000)
    27. Console.WriteLine(Now.ToLongTimeString & ":" & Now.Millisecond.ToString & ": " & "TASK: ENDED")
    28. Return True
    29. End Function
    30. End Module


    generiert folgende Ausgabe:

    Spoiler anzeigen

    18:23:55:890: Constructor called...
    18:23:55:892: CallAsync start
    18:23:55:899: Start Async operation...
    18:23:55:899: Have initiated the Task
    18:23:55:951: Task has started
    18:23:55:959: TASK: STARTING
    18:23:55:964: Constructor finished
    18:24:00:962: TASK: ENDED
    18:24:00:963: Task was finished!
    18:24:00:963: CallAsync ends


    OK, du hast jetzt nix gelernt, aber du hast deinen Willen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.
    Ich habe doch schon paar mal gesagt, dass ich mit vb in dem Fall leider nun mal nicht viel anfangen kann... Ich bekomme es nicht übersetzt...

    Außerdem schießt du manchmal mit Kanonen auf Spatzen. Fang doch mal klein an.
    Angenommen kleines neben Programm was für sich einfach mal läuft ohne das Hauptprogramm zu stören ohne eine Rückmeldung. Die Frage ist doch recht einfach: Wie geht das?
    Das startet man einmal, und es läuft und läuft bis das Hauptprogramm irgend wann mal beendet ist. Erzähl mir nicht, dass es so schwierig ist...

    EugenIS schrieb:

    Das startet man einmal, und es läuft und läuft bis das Hauptprogramm irgend wann mal beendet ist. Erzähl mir nicht, dass es so schwierig ist...

    Zwar denke ich das du nun gar nicht mehr (oder auch von Anfang an) von Threads redest, sondern was ganz anderes willst, aber ich "erzähl" dir jetzt überhaupt nichts mehr.
    DU hast nicht mal die Energy ein paar Zeilen Code zu übersetzen (in einem VB Forum) und WIR sollen die Energy haben dir alles vor zu kauen.

    Danke, ohne mich. Ich de-abonniere diesen Thread, das muss ich nicht lesen, ist meine Zeit die ich hier vergeude. Ich mach sowas sonst eigendlich nicht, aber das wird mir jetzt echt zu "tief".

    Grüße an die anderen.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.