Jak Windows 8 Runtime (WinRT / Windows Store apps / Windows 10 Universal App) porównuje się do Silverlight i WPF? [zamknięte]

Próbuję ogarnąć Nowy Windows 8 Runtime, który jest używany do tworzenia aplikacji w stylu Metro . Wiem, że można go używać z XAML i jest oparty na. Net więc C # i VB.NET może być używany do pisania aplikacji, ale wydaje się, że ma to coś wspólnego z HTML, CSS, DOM i JavaScript.

Czy ktoś może wyjaśnić, co to jest w kilku akapitach, w kategoriach, które programista. NET UI może zrozumieć? (Brakuje mi czegoś "kluczowego", co jest niezbędne do zrozumienia to.)


Wszyscy wiemy, że WPF, Silverlight, Windows Forms , itd. będzie działać pod Windows 8 (i Windows 10) przynajmniej na systemach Intel, więc proszę mi tego nie mówić...

Author: Peter Mortensen, 2011-09-14

5 answers

Na najniższym poziomie, WinRT jest modelem obiektowym zdefiniowanym na poziomie ABI. Używa COM jako bazy (więc każdy obiekt WinRT implementuje IUnknown i dokonuje refcountingu), a następnie buduje stamtąd. Dodaje sporo nowych koncepcji w porównaniu ze starymi COM, z których większość pochodzi bezpośrednio z. NET - na przykład model obiektowy WinRT ma delegatów, a zdarzenia są wykonywane w stylu. NET (z delegatami i metodami dodawania/usuwania subskrybentów, po jednej na zdarzenie) zamiast starego modelu COM źródeł zdarzeń i zlewów. Z inne godne uwagi rzeczy, WinRT ma również parametryzowane ("ogólne") interfejsy.

Kolejną dużą zmianą jest to, że wszystkie komponenty WinRT mają dostępne dla nich metadane, podobnie jak. Net assemblies. W COM masz tak jakby z typelibami, ale nie każdy komponent COM je miał. W przypadku WinRT metadane są zawarte w .pliki winmd-zajrzyj do środka "C:\Program Files (x86) \ Windows Kits\8.0 \ Windows metadane\" w Developer Preview. Jeśli grzebać wokół, zobaczysz, że są one rzeczywiście CLI zespoły bez kodu, tylko tabele metadanych. Możesz je otworzyć za pomocą ILDASM. Uwaga, nie oznacza to, że sam WinRT jest zarządzany - po prostu ponownie wykorzystuje format pliku.

Następnie istnieje wiele bibliotek zaimplementowanych w odniesieniu do tego modelu obiektowego-definiujących interfejsy i klasy WinRT. Ponownie, spójrz na folder "metadane Windows" wymieniony powyżej, aby zobaczyć, co tam jest; lub po prostu odpal Object Browser W VS i wybierz "Windows 8.0" w selektorze framework, aby zobaczyć, co jest objęte. Jest tam dużo i nie dotyczy to tylko interfejsu użytkownika - otrzymujesz również przestrzenie nazw, takie jak Windows.Data.Json, Windows.Graphics.Printing lub Windows.Networking.Sockets.

Następnie otrzymujesz kilka bibliotek, które zajmują się konkretnie interfejsem użytkownika - głównie są to różne przestrzenie nazw pod Windows.UI lub Windows.UI.Xaml. Wiele z nich jest bardzo podobnych do przestrzeni nazw WPF / Silverlight - np. Windows.UI.Xaml.Controls jest ściśle dopasowane System.Windows.Controls; ditto dla Windows.UI.Xaml.Documents itd.

Teraz. NET ma możliwość bezpośredniego odwoływania się do komponentów WinRT tak, jakby były złożeniami. NET. To działa inaczej niż COM Interop - nie potrzebujesz żadnych pośrednich artefaktów, takich jak Interop, po prostu /r a .plik winmd, a wszystkie typy i ich członkowie w metadanych stają się widoczne dla ciebie tak, jakby były obiektami. NET. Zauważ, że biblioteki WinRT same w sobie są w pełni natywne ( a więc natywne programy C++, które używają WinRT, w ogóle nie wymagają CLR) - Magia ujawniania tego wszystkiego jako zarządzanego znajduje się wewnątrz samego CLR i jest dość niski poziom. Jeśli używasz programu. NET, który Bibliografiawinmd, zobaczysz, że to faktycznie wygląda jak extern assembly reference - nie ma tam żadnych sztuczek ręcznych, takich jak osadzanie typu.

To również nie jest tępe mapowanie - CLR próbuje dostosować typy WinRT do ich odpowiedników, o ile to możliwe. Więc np. Guidy, daty i Uri stają się System.Guid, System.DateTime i System.Uri, odpowiednio; interfejsy kolekcji WinRT, takie jak IIterable<T> i IVector<T> stają się IEnumerable<T> i IList<T>; i tak dalej. To działa w obie strony-jeśli masz obiekt. NET, który implementuje IEnumerable<T> i przekazuje go z powrotem do WinRT, zobaczy go jako IIterable<T>.

Ostatecznie oznacza to, że Twoje aplikacje. Net Metro uzyskują dostęp do podzbioru istniejących standardowych bibliotek.NET, a także do (natywnych) bibliotek WinRT, z których niektóre - szczególnie Windows.UI - wyglądają bardzo podobnie do Silverlight pod względem API. Nadal masz XAML do definiowania interfejsu użytkownika i nadal masz do czynienia z tymi samymi podstawowymi pojęciami, co w Silverlight - powiązaniami danych, zasobami, stylami, szablonami itp. W wielu przypadkach jest możliwe portowanie aplikacji Silverlight po prostu przez using nowe przestrzenie nazw i dostosowanie kilku miejsc w kodzie, gdzie API zostało dostosowane.

Sam WinRT nie ma nic wspólnego z HTML i CSS, i ma związek z JavaScript tylko w tym sensie, że jest tam również narażony, podobnie jak w przypadku .NET. nie musisz zajmować się HTML / CSS / JS, gdy używasz bibliotek interfejsu użytkownika WinRT w swojej aplikacji. NET Metro (Cóż, myślę, jeśli naprawdę chcesz, możesz hostować kontrolkę WebView...). Wszystkie twoje umiejętności. NET i Silverlight pozostają bardzo istotne w tym modelu programowania.

 471
Author: Pavel Minaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-14 23:54:29

From the Build keynote:

Keynote stack

Zapewniają wspólne API zarówno aplikacjom HTML / CSS / JavaScript, jak i aplikacjom C# / XAML. C# i XAML będą używane, ale nie będzie to WPF czy Silverlight.

 65
Author: RandomEngy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 19:05:01

Kluczową ideą jest to, że teraz istnieją dwie ścieżki rozwoju-Desktop i Metro.

    Pulpit to miejsce, gdzie żyją stare aplikacje.
  • nowa klasa aplikacji, Metro applications, może być budowana na wiele sposobów, m.in. przez VB.NET, C # lub c++. Te trzy opcje językowe mogą używać XAML do budowania interfejsu użytkownika. Alternatywą jest użycie JavaScript / HTML5 / CSS do tworzenia zarówno interfejsu użytkownika, jak i kodu aplikacji.

Niektóre ważne punkty:

  • Windows 8 wydaje się jakby powiększonym systemem operacyjnym dla telefonów komórkowych.
  • W Metro nie ma nakładających się okien najwyższego poziomu, tak jak nie ma ich w telefonie komórkowym. Jeśli chcesz mieć aplikację w stylu MDI, musisz pozostać na pulpicie.
  • aplikacje Metro style są automatycznie zawieszane, gdy nie są widoczne. Miało to na celu wydłużenie żywotności baterii. Oznacza to, że nie będzie to miało sensu dla wielu istniejących aplikacji komputerowych, które wykonują przetwarzanie w tle, nawet gdy użytkownik nie jest interakcji z nimi, do przeniesienia do metra.
  • wersja ARM systemu Windows 8 nie będzie obsługiwać aplikacji desktopowych. Więc jeśli chcesz napisać aplikację i chcesz, aby działała na dowolnej wersji systemu Windows, To musi to być aplikacja Metro.
 36
Author: dodgy_coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-16 03:00:00

Istnieje zmodyfikowana wersja architektury, która z pewnością pomoże Ci zrozumieć, gdzie dokładnie leży ta rzecz. Jeden z Telerik Ninja porozmawiał z CLR i zmodyfikował zdjęcie:

Platforma i Narzędzia Windows 8 (W tym CLR)

Tutaj możesz zobaczyć, gdzie stoi CLR. Framework. NET ma teraz dwa profile

1 -. NET Metro profile (CLR, które zajmują się aplikacją Metro)

2 -. Net Client profile (CLR runtime dla C# i VB.NET aplikacje)

I hope this gives you wyraźniejszy obraz. Przeczytaj cały artykuł w zły obraz jest wart tysiąca długich dyskusji..

 23
Author: vendettamit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 19:07:29

Dużo szczegółów od Microsoftu tutaj .

Środowisko uruchomieniowe systemu Windows jest wyświetlane przy użyciu metadanych API (.pliki winmd). Jest to ten sam format używany przez. Net framework (Ecma-335). Podstawowa umowa binarna ułatwia dostęp do interfejsów API środowiska wykonawczego systemu Windows bezpośrednio w wybranym języku programowania. Kształt i struktura Windows Runtime API może być rozumiana zarówno przez języki statyczne, takie jak C# , jak i dynamiczne, takie jak JavaScript. IntelliSense jest dostępny w JavaScript, C#, Visual Basic i C++.

Krótko mówiąc, Windows Runtime jest nowym zestawem bibliotek eksponujących funkcjonalność systemu Windows i dostępnych dla JavaScript / C#/VB / C++. Każdy język został stworzony, aby zrozumieć i być w stanie nazwać je bezpośrednio, a nie muszą przejść przez jakąś warstwę grzmiącą.

Silverlight i WPF to smaki XAML, które działają na CLR. Wśród innych funkcjonalności Windows Runtime udostępnia wersję XAML bardzo podobną do Silverlight, ale robi to w sposób natywny, a nie przez CLR. Można go uzyskać z CLR, ale także z C++.

 16
Author: Steve Rowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-15 01:34:12