peter monadjemi | activetraining was ist neu bei vb11?
TRANSCRIPT
![Page 1: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/1.jpg)
Peter Monadjemi | ActiveTraining
Was ist neu bei VB11?
![Page 2: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/2.jpg)
Die Themen
• Co-Evolution• VB hat aufgeholt• Die (drei) Neuerungen auf einen Blick• Asynchrone Aufrufe neu definiert• Iteratoren• Entwickeln für Windows 8• Weitere Neuerungen bei VS 11 und .NET 4.5• Ein Blick in die nähere Zukunft
![Page 3: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/3.jpg)
Co-Evolution
• „VB und C# werden in Zukunft gemeinsam weiterentwickelt“
Anders Heljsberg, Distinguished Engineer bei Microsoft (und „Vater“ von Turbo Pascal und Delphi) im Juni 2009
![Page 4: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/4.jpg)
C# nähert sich VB an
• Über das dynamic-Schlüsselwort ist eine späte Bindung möglich
• Optionale und benannte Argumente bei Methoden
• C# hat damit VB „eingeholt“ - lediglich „Inline-XML“ gibt es nicht
![Page 5: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/5.jpg)
VB nähert sich C# an
• Ein – und mehrzeilige Lambdas• Einzeilige Properties• Collection-Initialisierer• Mit VB11 auch Iteratoren• Ein paar Kleinigkeiten fehlen, z.B. ein
direktes Pendant zum delegate-Befehl und den anonymen Methoden (Lambdas bei VB) delegate int FunDel(int x1, int x2);
FunDel f1 = delegate(int p1, int p2) { return p1 + p2;};
![Page 6: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/6.jpg)
VB hat aufgeholt
• XNA 4.0 – DirectX-Spiele können auch in VB entwickelt werden
• .NET MicroFramework ab Version 4.2 – VB-Code läuft auf kleinen RISC-CPUs
• Microsoft Surface 2.0 SDK enthält VB-Beispiele• Windows Phone 7 – VB-Code läuft (unter Silverlight)
auf einem SmartPhone• Im Rahmen von Silverlight läuft VB-Code auch unter
Mac OS X• Es gibt keine Abhängigkeit zur VB-Laufzeit
(Namespace Microsoft.VisualBasic) mehr
![Page 7: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/7.jpg)
Die (drei) Neuerungen bei VB 11
• Implementierung des Task-based Asynchronous Pattern (TAP) durch die Schlüsselwörter Async und Await
• Iteratoren über das Schlüsselwort Iterator• Der Stammnamespace kann über Global
überschrieben werden (wie in C#)• Ich hoffe, ich habe nichts vergessen;)• Eventuell enthält die aktuelle Beta1 noch
etwas
![Page 8: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/8.jpg)
Asynchrone Aufrufe
• Warum? Vorteile?• Das Task-based Asynchronous Pattern
(TAP) in .NET 4.5• Neu bei VB11: Async und Await• Ein paar Beispiele
– Beispiele basieren auf der Async CTP 3 für VS 2010 SP1 – mit .NET 4.5 wird es kleinere Änderungen geben
![Page 9: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/9.jpg)
Asynchrone Aufrufe – warum?
• Problem: Länger dauernde Operationen blockieren den UI-Thread– Warten auf eine Antwort einer Web-
Anfrage– Warten auf eine Datenbankabfrage– Umfangreichere Berechnung– usw.
• Vor allem bei mobilen Anwendungen darf die UI nicht „einfrieren“
![Page 10: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/10.jpg)
Asynchrone Aufrufe – Lösungsansätze
• Es gibt verschiedene Lösungsansätze:– Begin<Operation>/End<Operation>-Entwurfsmuster
aus .NET 1.x (z.B. FileStream-Klasse)– Auslagern auf einem Backgroundthread aus dem
Threadpool– Asynchrone Aufrufe über Delegaten, BeginInvoke und einem
Callback– Einige wenige.NET-Methoden sind von Haus aus asynchron
und melden sich über ein Event (z.B. DownloadStringAsync der WebClient-Klasse)
– Die BackgroundWorker-Komponente (der einfachste Ansatz)
![Page 11: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/11.jpg)
Asynchrone Aufrufe – Schwachpunkte der vorhandenen Ansätze
• Erhöhter Implementierungsaufwand• Viele Entwickler schrecken vor Delegaten,
asynchronen Callbacks zurück (wirken kompliziert)– Was ist mit vorzeitigem Abbruch oder einer
Fortschrittsmeldung?
• Die Programmlogik muss angepasst werden• Threads kosten Ressourcen (1 Mbyte
Arbeitsspeicher pro Thread?)
![Page 12: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/12.jpg)
Asynchrone Aufrufe – Neu: TAP
• TAP – Task-based asynchronous Patterns
• Empfehlung von Microsoft für die Umsetzung und den asynchronen Aufruf beliebiger Methoden
• Unbedingt das White-Paper lesen
http://www.microsoft.com/download/en/details.aspx?id=19957
![Page 13: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/13.jpg)
Asynchrone Aufrufe – TAP im Detail (1)
• Basiert auf den mit .NET 4.0 eingeführten Tasks– Ein Task steht für eine Operation (Methode), die
vom Task Scheduler ausgeführt wird
• Es gibt nur ein Methode– Namenskonvention: <Operation>TaskAsync– Gibt immer ein Task- bzw. Task(Of T)-Objekt
zurück
![Page 14: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/14.jpg)
Asynchrone Aufrufe – TAP im Detail (2)
• Die TaskAsync-Methode kehrt „sofort“ zurück– Der Initialisierungscode (sofern vorhanden) wird
synchron ausgeführt– Die Rückgabe ist immer ein Task-Objekt– Der Hauptteil wird asynchron ausgeführt, das
Ergebnis wird über das Task-Objekt zur Verfügung gestellt
– Exceptions werden ebenfalls über das Task-Objekt zur Verfügung gestellt
– Ein TaskAsync-Methode kann über ein CancellationToken jederzeit abgebrochen werden
![Page 15: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/15.jpg)
Asynchrone Aufrufe – ein Beispiel für eine TAP-Methode
Dim T = Wc.DownloadStringTaskAsync("http://basta.net")Dim Content = Await T
Dim Content = Await Wc.DownloadStringTaskAsync("http://basta.net")Befehl1Befehl2
Eine TaskAsync-Methode gibt ein Task(Of T)-Objekt zurück
Task(Of String)
Ohne den Umweg über eine Task(Of T)-Variable
Nicht blockierend
Werden über einen Callback erst nach Beendigung des Tasks ausgeführt
![Page 16: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/16.jpg)
Asynchrone Aufrufe - TAP bei .NET 4.5
• .NET 4.5 implementiert TAP auf zwei Ebenen– Es gibt verschiedene AsyncTask-
Methoden, z.B. DownloadStringAsyncTask bei der WebClient-Klasse
– Über die Schlüsselwörter Async und Await (async und await bei C#)
![Page 17: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/17.jpg)
Ein erstes BeispielVorher: Synchroner Download mehrerer Webseiten
Nachher: Asynchroner Download dank Async und Await
Function DownloadWebContent() As Integer Dim Wc As New WebClient Dim Anzahl = Wc.DownloadString("http://basta.net").Length Anzahl += Wc.DownloadString("http://heise.de").Length Anzahl += Wc.DownloadString("http://www.activetraining.de").Length Return AnzahlEnd Function
Async Function DownloadWebContentAsync() As Task(Of Integer) Dim Wc As New WebClient Dim Content = Await Wc.DownloadStringTaskAsync("http://basta.net") Dim Anzahl = Content.Length Content = Await Wc.DownloadStringTaskAsync("http://heise.de") Anzahl += Content.Length Content = Await Wc.DownloadStringTaskAsync("http://www.activetraining.de") Anzahl += Content.Length Return AnzahlEnd Function
![Page 18: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/18.jpg)
Die Rolle von Await (1)
• Neuer Operator in VB 11• Kann nur in Subs/Functions eingesetzt werden, die
mit Async deklariert sind (=asynchrone Methode)• Wartet auf das Resultat des gestarteten Tasks, ohne
den Thread zu blockieren• Await „splittet“ die Methode in zwei Abschnitte auf
– Abschnitt 1 legt den Task an und kehrt zurück– Abschnitt 2 umfasst die auf Await folgenden Befehle, die
über einen Callback aufgerufen werden
![Page 19: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/19.jpg)
Die Rolle von Await (2)
Async Sub Test() Dim z = Await TuWas() Console.WriteLine(z)End Sub
Async Function TuWas() As Task(Of Integer) Await TaskEx.Delay(5000) Return Await TaskEx.Run(Of Integer)(Function() Return 1234 End Function)End Function
Wird nach Beendigung des Tasks ausgeführt
![Page 20: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/20.jpg)
Beispiel: Asynchroner RSS-Reader
• WPF-Anwendung• RSS-Feeds werden über
DownloadStringAsyncTask heruntergeladen
• Abbruch jederzeit möglich• Fortschrittsanzeige über IProgress-
Schnittstelle
![Page 21: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/21.jpg)
Mehrere Tasks zusammenfassenVorher: WhenAll fasst mehrere Tasks zu einem Task zusammen
Async Sub DownloadUrls() Dim UrlListe() = {"http:/www.heise.de", "http:///www.basta.net", "http://dotnet.de", "http://msnd.com"} Dim AlleTasks As IEnumerable(Of Task) = From url In UrlListe Select TuWasAsync(url) ' Genial: WhenAll fasst alle Tasks zu einem neuen Task zusammen und Await wartet, dass alle Tasks fertig sind Await TaskEx.WhenAll(AlleTasks) Console.WriteLine("Alle Tasks haben fertig...")End Sub
Async Function TuWasAsync(Url As String) As Task(Of Boolean) Await TaskEx.Run(New Action(Sub() Console.WriteLine("Verarbeite {0} auf Thread-ID: {1}", Url,
Thread.CurrentThread.ManagedThreadId) Thread.Sleep(5000) End Sub)) Return TrueEnd Function
Thread aus ThreadpoolKünstliche VerzögerungHilfsklasse der Async CTP
Genial: Methodenaufruf, der ein Task-Objekt liefert, aus der LINQ-Abfrage herausl
![Page 22: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/22.jpg)
Iteratoren
• Was ist ein Iterator?• Ein Beispiel zur Einstimmung• Weitere Beispiele
![Page 23: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/23.jpg)
Iteratoren - Was ist ein Interator?
• Iterator = Funktion vom Typ IEnumerable(Of T), die wie eine Collection durchlaufen wird
• Wird mit dem neuen Iterator-Schlüsselwort implementiert
• Ein Wert wird über den neuen Yield-Befehl zurückgegeben
• Vorteil: Die Rückgabe der einzelnen Werte lässt sich steuern
• Vorteil: Generell mehr Flexibilität• Der LINQ-Effekt: Sobald man sich daran gewöhnt
hat, verwendet man es bei der jeder Gelegenheit
![Page 24: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/24.jpg)
Iteratoren – ein Beispiel zur Einstimmung
Beispiel: Ein Range-Methode gibt einen Zahlenbereich zurück
Variante A:
Dim Zahlen = Range1(4, 10) Iterator Function Range1(Min As Byte, Max As Byte) As IEnumerable(Of Byte) For i = Min To Max Yield i NextEnd Function
Variante B:
Function Range2(Min As Byte, Max As Byte) As IEnumerable(Of Byte) Return Iterator Function() For i = Min To Max Yield I Next End Function.Invoke()End Function
![Page 25: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/25.jpg)
Iteratoren – mit einem Lambda
Beispiel: Ein Lambda-Iterator gibt einen Zahlenbereich zurück
Dim Zahlen = Iterator Function(min As Integer, max As Integer) For i = min To max Yield i Next End Function.Invoke(4, 5)
Aufruf des Lambda
![Page 26: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/26.jpg)
Iteratoren und Inline-XMLBeispiel: Ein Lambda-Iterator gibt einen Zahlenbereich zurück
Dim RSS = <?xml version="1.0"?> <RSS> <chanell> <%= Iterator Function() For Each M In Meldungen Yield <item> <title><%= M.Titel %></title> <date><%= M.Zeitpunkt.ToShortDateString()></date> </item> Next End Function.Invoke() %> </chanell> </RSS>
XElement-Objekt
Xdocument-Objekt Lambda-IteratorCollection mit Meldung-Objekte
![Page 27: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/27.jpg)
Iteratoren – Weitere Beispiele
• Implementierung einer einfachen State-Machine
• Durchlaufen eines Baums
![Page 28: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/28.jpg)
Entwickeln für Windows 8
• Neu: Windows Runtime anstelle von .NET Runtime
• Metro Style-Anwendungen als neuer Anwendungstyp
• Die Rolle von Visual Basic
![Page 29: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/29.jpg)
Die Windows Runtime (Windows RT)
• Laufzeit für Windows 8 Metro Style-Anwendungen• Umfasst ca. 1.800 Klassen• Kapselt viele Win32-API-Funktionen• Wird über COM-Schnittstellen angesprochen (IUnknown
ist zurück)• Über „Projections“ Schnittstellen zu NET, C++ usw.• Es gibt eine .NET-Metro-Klassenbibliothek (Metro Style
Profile)– Der Name ist .NET for Metro Style Apps– Teilmenge der .NET-Klassenbibliothek– Teilweise nicht kompatibel (andere Typen- und Membernamen)
![Page 30: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/30.jpg)
Das neue Anwendungsmodell
![Page 31: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/31.jpg)
Metro Style Apps
• Neues Oberflächenmodell - das erste seit Windows 95 (!)
• Im Mittelpunkt stehen die mit der Windows Phone 7-Oberfläche (Metro) eingeführten Kacheln
• Kacheln – Einstiegspunkt für eine Anwendung• Optimiert für Touch-Oberflächen
![Page 32: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/32.jpg)
Die Rolle von Visual Basic
• Windows 8 enthält die .NET 4.5-Laufzeit• Entwickelt wird mit VS 11 bzw. VS 11 Express
Edition• Zahlreiche Vorlagen• Oberfläche wird in XAML definiert• Silverlight-Apps können mit geringem
Aufwand umgestellt werden• Anwendungen werden nach wie vor von der
CLR (4.5) ausgeführt
![Page 33: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/33.jpg)
Verbesserungen bei .NET 4.5 und VS 11
• Neue Klassen, z.B. HttpClient• Implementierung des Task-based
Asynchronous Pattern• Neuer WPF- und Silverlight-Designer
– Der Designer aus Expression Blend wurde in die Visual Studio-IDE „eingepflanzt“
• Wichtige Verbesserungen beim Thema Application Life Cycle Management (ALM)
![Page 34: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/34.jpg)
Roslyn – Compiler als Service
• Die Compiler-Infrastruktur wird aufgebohrt und ihre Funktionalitäten werden über Klassen zur Verfügung gestellt
• Entwickler können sich damit eigene Syntaxparser oder Codegeneratoren schreiben
• Seit Oktober 2011 gibt es eine erste CTP – möglicherweise Teil des Nachfolgers von .NET 4.5
![Page 35: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/35.jpg)
Roslyn – viele neue Möglichkeiten
• Die Compiler-Klassen standen bei .NET schon immer zur Verfügung • Namespace System.CodeDom.Compiler• Damit lässt sich zur Laufzeit Quellcode in eine
Assembly kompilieren und ausführen– Roslyn bietet einen Zugriff auf die einzelnen Phasen
der Kompilierung und den resultierenden Syntaxbaum, der das kompilierte Programm repräsentiert
– Neben einer Syntaxanalyse ist eine auch eine semantische Analyse des Codes möglich
![Page 36: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/36.jpg)
Roslyn – Beispiele aus der CTP
• VisualBasicToCSharpConverter– Konvertiert VB-Code nach C#
• RemoveByValVB– Entfernt überflüssige ByVal`s
• OrganizeSolutionVB– Sortiert Import-Anweisungen
• ConvertToAutoPropertyVB– Konvertiert „leere“ Property-Definitionen in Auto-Properties
• ScriptingIntro (aktuell nur C#)– C#-Shell mit einem C#-Intepreter
![Page 37: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/37.jpg)
Ein Blick in die Zukunft (1)
• Das Innovationstempo wird sich bei der Sprache sicherlich verlangsamen
• Die „wir müssen die VB6-Entwickler zurückgewinnen“-Phase ist bei Microsoft wieder vorbei
• Alle wichtigen Sprachelemente sind implementiert• Die Möglichkeit jede Methode asynchron aufrufen zu
können ist ein wichtiger Schritt in die richtige Richtung - vor allem für VB-Entwickler
![Page 38: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/38.jpg)
Ein Blick in die Zukunft (2)
• Ein paar Anregungen für künftige Sprachelemente bei VB und C# findet man sicher bei F#
• Roslyn wird neue IDE-Tools ermöglichen– C#->VB-Konverter– Eine VB.NET-Skript-Shell
• Wer braucht weitere Features? Die aktuell vorhandene Funktionalität ist mehr als ausreichend
![Page 39: Peter Monadjemi | ActiveTraining Was ist neu bei VB11?](https://reader036.vdocuments.site/reader036/viewer/2022062417/55204d6f49795902118c0993/html5/thumbnails/39.jpg)
Feedback und Fragen
• Bitte Feedbackbogen ausfüllen• Bei Fragen rund um VB –
[email protected]• Mein Visual Basic-Kompendium kommt
im Herbst 2012 !– Der rote Faden ist die „Moderne Visual
Basic-Programmierung“