Event in vb.net Anwendung nutzen

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

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Event in vb.net Anwendung nutzen

    Hallo ich versuche aus der SpotifyAPI (johnnycrazy.github.io/SpotifyAPI-NET/SpotifyLocalAPI/#events) das Event OnTrackChange zu verwenden.

    Da die dll für c# geschrieben ist gibt es kein vb.net beispiel habe so etwas versucht:
    (imports sind vorhanden)

    Quellcode

    1. Dim SLA = New SpotifyLocalAPI
    2. SLA.ListenForEvents = True

    und

    Quellcode

    1. Private Sub SLA_OnTrackChange(sender As Object, e As TrackChangeEventArgs)
    2. MsgBox("geht")
    3. End Sub

    doch wie erwartet funktioniert es nicht :(
    wenn ich mir meinen code angucke rufe ich auch nie die Sub auf also kann es nicht funktionieren.
    Habe aber leider gar keine Ahnung wie ich diese Funktion verwenden könnte und hoffe deshalb das mir jemand weiterhelfen kann.

    Hier ist nochmal das c# beispiel: github.com/JohnnyCrazy/Spotify…I.Example/LocalControl.cs
    Hi!

    Ich denke Du brauchst zusätzlich zum "SLA.ListenForEvents = True" auch noch:

    VB.NET-Quellcode

    1. AddHandler SLA.OnTrackChange, AddressOf SLA_OnTrackChange


    Ach so, und das "SLA" würde ich so deklarieren:

    VB.NET-Quellcode

    1. Dim SLA As SpotifyLocalAPI = New SpotifyLocalAPI
    … denn woher soll woher soll der Compiler sonst wissen, welche Prozeduren sich für jenes Event interessieren, wenn man es ihm nicht per AddHandler (oder Handles-Klausel für nicht-dynamische Komponenten) mitteilt? Das nur als Erläuterung.
    @Morrison: Punkt 2 ist mit Option Infer doch moppelt gedoppelt. Dim X = New Y sagt dem Compiler doch schon automatisch, was X für einen Typ haben soll, und das davon eine neue Instanz erstellt werden soll, so z.B. auch bei Dim DlgSettings = New FrmSettings oder Dim Excel = New Microsoft.Office.InterOp.Excel.Application. Genauso ginge m.E. Dim X As New Y.
    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.
    Hallo

    Sorry das ich meinen Senf dazu gebe.

    VaporiZed schrieb:

    Dim X = New Y sagt dem Compiler doch schon automatisch, was X für einen Typ haben soll

    Ich mach das auch gerne so. Warum? Der Compiler weis es schon, aber ich evtl. nicht.
    So kann ich "Fehler" evtl. sofort sehen.

    z.b. nimmt der Compiler das hier an:

    VB.NET-Quellcode

    1. Dim x = mylist.Where(Function(s) s.property = "a")
    2. For Each y In x
    3. 'BlaBla
    4. Next


    Was sicher nicht funktionieren wird.
    Wenn ich es so schreibe weis der Compiler und ICH das es nicht richtig ist (Strict vorausgesetzt):

    VB.NET-Quellcode

    1. Dim x As List(Of irgendwas) = mylist.Where(Function(s) s.property = "a")
    2. For Each y In x
    3. 'BlaBla
    4. Next

    Und unterwellt es. So weis ich gleich das ich mylist.Where(Function(s) s.property = "a").ToList schreiben muss damit es läuft.
    Es kann einem also auch Helfen. Außerdem sieht man mein durchsehen des Codes immer WAS in der Variable enthalten ist.

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

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nofear23m“ ()

    Erstmal danke für die Hilfe aber bei

    Quellcode

    1. AddHandler SLA.OnTrackChange, AddressOf SLA_OnTrackChange


    ist .OnTrackChange rot unterstrichen.
    Hab mal im Objektkatalog nach geguck aber dort ist .OnTrackChange garnicht zu finden.
    Vielleich fehlt sowas:

    Quellcode

    1. InitializeComponent();
    2. _spotify = new SpotifyLocalAPI();
    3. _spotify.OnTrackChange += _spotify_OnTrackChange;



    Der letzte Codeblock ist in C# geschrieben. Das VB-Äquivalent ist das von Morrison genannte AddHandler-Code-Snippet. Welche Fehlermeldung wird Dir denn für SLA.OnTrackChange angezeigt?
    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.
    @VaporiZed : Sonst erkennt er des nur als Object und nicht als SpotifyLocalAPI!

    Hatte zuerst auch nur "Dim SLA = New SpotifyLocalAPI" dann wird nur ein Object erkannt und kein "SpotifyLocalAPI"!

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

    Habe noch eine Frage:
    Habe eine Sub die sobald ich sie das zweite mal aufrufe
    System.InvalidOperationException
    ausgibt

    Der Code ist:

    Quellcode

    1. Public Sub trackinfo()
    2. Dim status As New StatusResponse
    3. status = SLA.GetStatus
    4. songinfoint.Text = status.Track.ArtistResource.Name
    5. End Sub


    Das Label wird an keiner anderen stelle bearbeitet außer bei From Load

    Spoiler anzeigen
    System.InvalidOperationException ist aufgetreten.
    HResult=0x80131509
    Nachricht = Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement songinfoint erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
    Quelle = System.Windows.Forms
    Stapelüberwachung:
    bei System.Windows.Forms.Control.get_Handle()
    bei System.Windows.Forms.Control.set_WindowText(String value)
    bei System.Windows.Forms.Control.set_Text(String value)
    bei System.Windows.Forms.Label.set_Text(String value)
    bei SpotIO.info.trackinfo() in \info.vb: Zeile138
    bei SpotIO.info.SLA_OnTrackChange(Object sender, TrackChangeEventArgs e) in \info.vb: Zeile97
    bei SpotifyAPI.Local.SpotifyLocalAPI.ElapsedTick(Object sender, ElapsedEventArgs e)
    bei System.Timers.Timer.MyTimerCallback(Object state)
    Ja, das ist halt so - Ungültiger threadübergreifender Vorgang: aus einem Nebenthread kannst du Control-Properties nicht setzen.
    Da muss man Control.BeginInvoke() bemühen.

    VB.NET-Quellcode

    1. Public Sub trackinfo()
    2. Dim status = SLA.GetStatus
    3. songinfoint.BeginInvoke(new Action( Sub()songinfoint.Text = status.Track.ArtistResource.Name))
    4. End Sub

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