Mehrere Zeilen in Me.Invoke()

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Mehrere Zeilen in Me.Invoke()

    Hallo,

    ich bräuchte bitte kurz Hilfe mit der Syntax, Ich erstelle aus einem anderen Thread ein Form, welches mit
    .Show() aufgerufen werden soll. Leider funktioniert dieser Aufruf nicht:

    VB.NET-Quellcode

    1. If List_of_images_not_found.Count > 0 Then
    2. If Application.OpenForms.OfType(Of Form_of_not_found_images)().Count() = 1 Then
    3. Application.OpenForms.OfType(Of Form_of_not_found_images)().First().Close()
    4. End If
    5. Dim Fonfi As New Form_of_not_found_images
    6. 'Dim thisaction As Action(Of Form_of_not_found_images) = Sub()
    7. ' Fonfi.ShowData(List_of_images_not_found)
    8. ' Fonfi.Show()
    9. ' End Sub
    10. Me.Invoke(Sub() Fonfi.ShowData(List_of_images_not_found),
    11. Sub() Fonfi.Show())
    12. End If

    Unbehandelte Ausnahme: System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.Reflection.TargetParameterCountException: Parameteranzahlkonflikt.


    Und das hier habe ich im Netz gefunden und versucht, auf meine Bedürfnisse anzupassen; das funktioniert auch nicht:

    VB.NET-Quellcode

    1. If List_of_images_not_found.Count > 0 Then
    2. If Application.OpenForms.OfType(Of Form_of_not_found_images)().Count() = 1 Then
    3. Application.OpenForms.OfType(Of Form_of_not_found_images)().First().Close()
    4. End If
    5. Dim Fonfi As New Form_of_not_found_images
    6. Dim thisaction As Action(Of Form_of_not_found_images) = Sub()
    7. Fonfi.ShowData(List_of_images_not_found)
    8. Fonfi.Show()
    9. End Sub
    10. Me.Invoke(thisaction)
    11. 'Me.Invoke(Sub() Fonfi.ShowData(List_of_images_not_found),
    12. ' Sub() Fonfi.Show())
    13. End If

    Unbehandelte Ausnahme: System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.Reflection.TargetParameterCountException: Parameteranzahlkonflikt.


    List_of_images_not_found ist eine List(Of String).

    Ich habe bereits in Einzelschritten debuggt. Der Fehler ist tatsächlich in der Zeile mit Me.Invoke().




    Hat sich erledigt
    :rolleyes: :

    VB.NET-Quellcode

    1. If List_of_images_not_found.Count > 0 Then
    2. If Application.OpenForms.OfType(Of Form_of_not_found_images)().Count() = 1 Then
    3. Application.OpenForms.OfType(Of Form_of_not_found_images)().First().Close()
    4. End If
    5. Dim Fonfi As New Form_of_not_found_images
    6. Dim thisaction As Action = Sub()
    7. Fonfi.ShowData(List_of_images_not_found)
    8. Fonfi.Show()
    9. End Sub
    10. Me.Invoke(thisaction)
    11. End If

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

    @Bartosz Überlege ob es sinnvoll ist, die Prozedur als "richtige" Prozedur Deinem Code hinzuzufügen und diese zu invoken und keine "anonyme" Prozedur zu invoken.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du willst darauf hinaus, dass eine „richtige“ Prozedur zusätzlich von anderen Stellen aufgerufen werden kann, wenn mehr Programmzeilen geschrieben werden und es nötig wird. Ja, ich stimme dir zu, was das angeht. Aber ich wollte nicht die Liste übergeben oder klassenweit deklarieren. Genauso das erzeugte Form.
    btw: Das hier

    VB.NET-Quellcode

    1. If Application.OpenForms.OfType(Of Form_of_not_found_images)().Count() = 1 Then
    2. Application.OpenForms.OfType(Of Form_of_not_found_images)().First().Close()
    3. End If

    könntest Du kürzen zu

    VB.NET-Quellcode

    1. Application.OpenForms.OfType(Of Form_of_not_found_images)().SingleOrDefault()?.Close()

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke @VaporiZed, habe die Zeile eben eingebaut und getestet :thumbsup:

    By the way: Visual Studio hat mir gerade vorgeschlagen, die Code-Zeilen zu kürzen. Bei mir steht nun einfach

    VB.NET-Quellcode

    1. Me.Invoke(Sub()
    2. Fonfi.ShowData(List_of_images_not_found)
    3. Fonfi.Show()
    4. End Sub)

    Das war gestern noch falsch! Unfassbar! Was hatte ich da verbockt? Wahrscheinlich, weil ich mit Unterstrichen gearbeitet habe?
    Nee, das ist doch nur die Inline-Verwendung, weil Du ja später thisaction nicht mehr brauchst. Daher musst Du es auch nicht erst in ne Variable stecken. Aber mit Unterstrichen hat das nix zu tun, das sind ja zulässige Bestandteile eines Variablennamens. Oder meinst Du Unterstriche zur Zeilenfortsetzung?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nee, das ist doch nur die Inline-Verwendung, weil Du ja später thisaction nicht mehr brauchst.
    Ja, genau.

    Ich meinte Unterstriche zur Zeilenfortsetzung. Ich habe auch vorhin gemerkt, dass das nicht sein kann. Ich darf in diesem Fall eben keine machen. Davon abgesehen hat Visual Studio dennoch gesagt, es müssten Kommata gesetzt werden. Ich verstand das so, dass er die beiden Zeilen nicht als einen Sub sieht, daher habe ich mit Action angefangen.