it-swarm.com.de

Wie vergleicht Windows 8 Runtime (WinRT / Windows Store-Apps / Windows 10 Universal App) mit Silverlight und WPF?

Ich versuche, mich mit der neuen Windows 8 Runtime vertraut zu machen, mit der Apps im Metro -Stil erstellt werden. Ich weiß, dass Sie es mit XAML verwenden können, und es basiert auf .NET, so dass C # und VB.NET zum Schreiben der Apps verwendet werden können, aber dann scheint es etwas mit HTML, CSS, DOM und JavaScript zu tun haben.

Kann jemand erklären, was es in ein paar Absätzen ist, in Begriffen, die ein .NET UI-Programmierer verstehen kann? (Mir fehlt etwas "Schlüssel", der notwendig ist, um es zu verstehen.)


Wir alle wissen, dass WPF, Silverlight , Windows Forms usw. zumindest auf Intel-Systemen unter Windows 8 (und Windows 10) weiterhin funktionieren Erzähl es mir...

352
Ian Ringrose

Auf der untersten Ebene ist WinRT ein auf ABI-Ebene definiertes Objektmodell. Es verwendet COM als Basis (also implementiert jedes WinRT-Objekt IUnknown und führt eine erneute Zählung durch) und erstellt von dort aus. Im Vergleich zu früheren COM-Konzepten, von denen die meisten direkt aus .NET stammen, werden viele neue Konzepte hinzugefügt. Beispielsweise verfügt das WinRT-Objektmodell über Delegaten, und Ereignisse werden im .NET-Stil ausgeführt (mit Delegaten und Abonnenten hinzufügen/entfernen) Methoden (eine pro Ereignis) anstelle des alten COM-Modells der Ereignisquellen und -senken. Von anderen bemerkenswerten Dingen hat WinRT auch parametrisierte ("generische") Schnittstellen.

Eine weitere große Änderung ist, dass für alle WinRT-Komponenten Metadaten verfügbar sind, genau wie für .NET-Assemblys. In COM hatte man das irgendwie mit Typelibs, aber nicht jede COM-Komponente hatte sie. Bei WinRT sind die Metadaten in .winmd-Dateien enthalten. Sehen Sie in der Entwicklervorschau unter "C:\Programme (x86)\Windows Kits\8.0\Windows-Metadaten \" nach. Wenn Sie sich umschauen, werden Sie feststellen, dass es sich tatsächlich um CLI-Assemblys ohne Code handelt, nur um Metadatentabellen. Sie können sie tatsächlich mit ILDASM öffnen. Beachten Sie, dass dies nicht bedeutet, dass WinRT selbst verwaltet wird - es verwendet einfach das Dateiformat.

Dann gibt es eine Reihe von Bibliotheken, die in Bezug auf dieses Objektmodell implementiert sind und WinRT-Schnittstellen und -Klassen definieren. Sehen Sie sich den oben genannten Ordner "Windows Metadata" an, um zu sehen, was sich dort befindet. oder starten Sie einfach den Objektbrowser in VS und wählen Sie "Windows 8.0" in der Framework-Auswahl, um zu sehen, was abgedeckt ist. Es gibt eine Menge und es geht nicht nur um die Benutzeroberfläche - Sie erhalten auch Namespaces wie Windows.Data.Json Oder Windows.Graphics.Printing Oder Windows.Networking.Sockets.

Dann erhalten Sie mehrere Bibliotheken, die sich speziell mit der Benutzeroberfläche befassen - meist sind dies verschiedene Namespaces unter Windows.UI Oder Windows.UI.Xaml. Viele von ihnen sind WPF/Silverlight-Namespaces sehr ähnlich - z. Windows.UI.Xaml.Controls Passt genau zu System.Windows.Controls; das Gleiche gilt für Windows.UI.Xaml.Documents usw.

Jetzt kann .NET direkt auf WinRT-Komponenten verweisen, als ob es sich um .NET-Assemblys handeln würde. Dies funktioniert anders als bei COM Interop - Sie benötigen keine Zwischenartefakte wie Interop-Assemblys, nur /r Eine .winmd-Datei, und alle Typen und ihre Mitglieder in ihren Metadaten werden für Sie sichtbar, als wären sie .NET-Objekte. Beachten Sie, dass WinRT-Bibliotheken selbst vollständig nativ sind (und daher für native C++ - Programme, die WinRT verwenden, überhaupt keine CLR erforderlich sind). Wenn Sie ein .NET-Programm verwenden, das auf eine .winmd-Datei verweist, werden Sie feststellen, dass es tatsächlich wie eine externe Assembly-Referenz aussieht.

Es ist auch keine stumpfe Zuordnung - CLR versucht, die WinRT-Typen nach Möglichkeit an ihre Entsprechungen anzupassen. So kann z.B. GUIDs, Datumsangaben und URIs werden zu System.Guid, System.DateTime Bzw. System.Uri. WinRT-Erfassungsschnittstellen wie IIterable<T> Und IVector<T> Werden zu IEnumerable<T> Und IList<T>; und so weiter. Dies funktioniert in beide Richtungen - wenn Sie ein .NET-Objekt haben, das IEnumerable<T> Implementiert, und es an WinRT zurückgeben, wird es als IIterable<T> Angezeigt.

Letztendlich bedeutet dies, dass Ihre .NET Metro-Apps Zugriff auf eine Teilmenge der vorhandenen .NET-Standardbibliotheken sowie auf (native) WinRT-Bibliotheken erhalten, von denen einige - insbesondere Windows.UI - sehr ähnlich aussehen Silverlight, API-weise. Sie haben immer noch XAML, um Ihre Benutzeroberfläche zu definieren, und Sie beschäftigen sich immer noch mit den gleichen grundlegenden Konzepten wie in Silverlight - Datenbindungen, Ressourcen, Stile, Vorlagen usw. In vielen Fällen ist es möglich, eine Silverlight-App einfach mit using die neuen Namespaces und einige Stellen im Code, an denen die API angepasst wurde.

WinRT selbst hat nichts mit HTML und CSS zu tun und hat nur insofern mit JavaScript zu tun, als es dort ebenfalls verfügbar gemacht wird, ähnlich wie es für .NET gemacht wird. Sie müssen sich nicht mit HTML/CSS/JS befassen, wenn Sie WinRT-UI-Bibliotheken in Ihrer .NET Metro-App verwenden (ich denke, wenn Sie wirklich wollen, können Sie ein WebView -Steuerelement hosten.) .). Alle Ihre .NET- und Silverlight-Kenntnisse bleiben in diesem Programmiermodell von großer Relevanz.

478
Pavel Minaev

Aus der Build Keynote:

Keynote stack

Sie bieten gemeinsame APIs sowohl für HTML/CSS/JavaScript-Apps als auch für C #/XAML-Apps. Es werden C # und XAML verwendet, jedoch nicht WPF oder Silverlight.

65
RandomEngy

Die Schlüsselidee ist, dass es jetzt zwei Entwicklungspfade gibt - den Desktop und die Metro.

  • Auf dem Desktop befinden sich die alten Apps.
  • Die neue Klasse von Anwendungen, Metro-Anwendungen, kann auf verschiedene Arten erstellt werden, unter anderem mit VB.NET, C # oder C++. Diese drei Sprachoptionen können XAML zum Erstellen der Benutzeroberfläche verwenden. Die Alternative besteht darin, JavaScript/HTML5/CSS für die Entwicklung der Benutzeroberfläche und des Anwendungscodes zu verwenden.

Einige wichtige Punkte:

  • Windows 8 fühlt sich wie ein gehobenes Betriebssystem für Mobiltelefone an.
  • In Metro gibt es keine überlappenden Fenster auf oberster Ebene, so wie es auf einem Mobiltelefon keine gibt. Wenn Sie eine Anwendung im MDI -Stil verwenden möchten, müssen Sie auf dem Desktop bleiben.
  • Apps im Metro-Stil werden automatisch angehalten, wenn sie nicht sichtbar sind. Dies wurde durchgeführt, um die Batterielebensdauer zu verlängern. Dies bedeutet, dass es für viele vorhandene Desktop-Apps, die Hintergrundverarbeitung durchführen, auch wenn der Benutzer nicht mit ihnen interagiert, keinen Sinn macht, auf Metro portiert zu werden.
  • Die ARM -Version von Windows 8 unterstützt keine Desktopanwendungen. Wenn Sie also eine App schreiben und diese auf einer beliebigen Windows-Version ausführen möchten, muss es sich um eine Metro-App handeln.
36
dodgy_coder

Es gibt eine modifizierte Version der Architektur, die Ihnen sicherlich helfen wird zu verstehen, wo genau die Dinge liegen. Einer der Telerik-Ninjas unterhielt sich mit dem CLR Team und änderte das Bild:

Windows 8 Platform and Tools (including the CLR)

Hier können Sie sehen, wo die CLR steht. Das .NET Framework verfügt jetzt über zwei Profile

1- .NET Metro-Profil (CLR, die sich mit Metro-Anwendungen befasst)

2- .NET Client-Profil (CLR-Laufzeit für C # - und VB.NET-Anwendungen)

Ich hoffe, das gibt Ihnen ein klareres Bild. Lesen Sie den vollständigen Artikel in Ein schlechtes Bild ist tausend lange Diskussionen wert..

23
vendettamit

Viele Details von Microsoft hier .

Die Windows-Laufzeitumgebung wird mithilfe von API-Metadaten (.winmd-Dateien) bereitgestellt. Dies ist dasselbe Format, das vom .NET-Framework (Ecma-335) verwendet wird. Der zugrunde liegende Binärvertrag erleichtert Ihnen den direkten Zugriff auf die Windows Runtime-APIs in der Entwicklungssprache Ihrer Wahl. Form und Struktur der Windows Runtime-APIs können sowohl von statischen Sprachen wie C # als auch von dynamischen Sprachen wie JavaScript verstanden werden. IntelliSense ist in JavaScript, C #, Visual Basic und C++ verfügbar.

Kurz gesagt, Windows Runtime ist eine neue Gruppe von Bibliotheken, die die Windows-Funktionalität bereitstellen und für JavaScript/C #/VB/C++ verfügbar sind. Jede Sprache wurde so gestaltet, dass sie sie direkt verstehen und anrufen kann, anstatt sich durch eine Überlegung zu bewegen.

Silverlight und WPF sind Varianten von XAML, die auf der CLR ausgeführt werden. Unter anderem stellt Windows Runtime eine Version von XAML zur Verfügung, die Silverlight sehr ähnlich ist, dies jedoch auf systemeigene Weise und nicht über die CLR. Es kann aus der CLR, aber auch aus C++ zugegriffen werden.

16
Steve Rowe