Elegantes Invoke ab Studio 2005, C#, VB.NET

    • Allgemein

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

      Elegantes Invoke ab Studio 2005, C#, VB.NET

      Ich hab gerade ein uraltes 2005-Projekt unter die Fitiche bekommen, in denen eine mir ungeläufige, jedoch äußerst elegante Invoke / BeginInvoke-Syntax vorkam, die ich Euch nicht vorenthalten möchte:

      C#-Quellcode

      1. this.Invoke(new EventHandler(delegate
      2. {
      3. this.Label1.Text = "bla";
      4. this.Label2.Text = "bla 2";
      5. this.Label3.Text = "bla 3";
      6. }));

      VB.NET-Quellcode

      1. Me.Invoke(New EventHandler(Sub()
      2. Me.Label1.Text = "bla"
      3. Me.Label2.Text = "bla 2"
      4. Me.Label3.Text = "bla 3"
      5. End Sub))
      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!
      Wie sonst, wenn ich fragen darf?
      Me.Invoke(Sub() Foo = Bar) kenne ich eigentlich als Standard. Bzw. wird es in VB 2005 wohl noch nicht die Kurzform geben, deshalb explizit New EventHandler.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils

      RodFromGermany schrieb:

      VB.NET-Quellcode

      1. Me.Invoke(New EventHandler(Sub()
      2. Me.Label1.Text = "bla"
      3. Me.Label2.Text = "bla 2"
      4. Me.Label3.Text = "bla 3"
      5. End Sub))
      Wobei eine parameterlose Sub ja kein EventHandler ist, sondern eine Action - richtiger wäre also

      VB.NET-Quellcode

      1. Me.Invoke(New Action(Sub()
      2. Me.Label1.Text = "bla"
      3. Me.Label2.Text = "bla 2"
      4. Me.Label3.Text = "bla 3"
      5. End Sub))
      AFAIK funzt das auch erst mit Vb-Compilern ab 2010 - vorher gabs die Sub() - Syntax noch nicht.
      Hingegen c# konnte das schon früher.