520 likes | 681 Views
Ticki. Lessons learned from developing a Windows 8 Metro application in C#. Frode Nilsen Nilsen Labs. Agenda. Async-await done right Applying the MVVM pattern in Windows 8 Unscientific comparison of MS XAML technologies. The async-await pattern. What it is What it not is Pitfalls
E N D
Ticki Lessons learned from developing a Windows 8 Metro application in C# Frode NilsenNilsen Labs
Agenda • Async-await done right • Applying the MVVM pattern in Windows 8 • Unscientific comparison of MS XAML technologies
The async-await pattern • What it is • What it not is • Pitfalls • Applying it properly
Background • Feb 2012: Introduced in .Net 4.5 • Spring 2011: Async CTP • June 2008: Task Parallel Library (TPL, .NET 4.0)
The basics • Two new c# keywords: async and await • Makes asyncronous programming easy • Makes asyncronous code clean
The new way 1 2
Defintion: Asynchrony • «Not at the same time» • When method returns to the caller • When the caller gets the return value Threads
Going deeper • Async part 1, part 2 NDC 2012 presentation Lucian Wischik (Microsoft Senior Program Manager) • The Task Asynchronous Pattern (TAP) paperby Stephen Toub Feb 2012 (Microsoft Async Guru) • Progress reporting • Cancellation • Retrying • Interleaving • Throttling
Option 1 – Serially Rq 1 Rq 2 Rq 3 Rq 4 Time
Option 2 – In Parallel Rq 1 Rq 2 Rq 3 Rq 4 Time
Option 3 – Throttled parallelism • Google «AsyncSemaphore» Request slot 1 Rq 2 Rq 3 Request slot 2 Rq 1 Rq 4 Time
Async pitfalls 1 : Blocking threads • Task.Wait() • Task.Result
Rule of thumbs for async await • Never return async void from a method, unless it’s a UI event handler • Always await async methods.If you want to run several tasks in parallel, use await Task.WhenAll() or await Task.WhenAny() • Never use Task.Wait() or Task.Result to «synchronify» async methods, except in unit tests. • Never do async calls from constructors
MVVM in Windows 8 • Recap of the gist • Applying it to Windows 8 • Pitfalls • Tools and tips
MVVM Model From MSDN Send notifications Data binding and commands ViewModel Send notifications Updates View
MVVM Model Send notifications Data binding and commands DATABINDING ViewModel Send notifications Updates View
Things that are impossible to do directly from the ViewModel • Give a visual element focus • Select text in a text box • Scroll an item into view • Show / hide Charms, App-or Navigation-bar
MVVM Quotes from the Wikipedia article “MVVM is targeted at modern UI development platforms which support Event-driven programming”
MVVM Quotes from the Wikipedia article “MVVM is targeted at modern UI development platforms which support Event-drivenprogramming”
ViewModels Controls and DataContext Controls A ListView A C B C E A B D
ViewModels Controls and DataContext Controls A ListView A C B C E A B D
ViewModels Controls and DataContext Controls A ListView A C D B E C E A B D F
ViewModels Controls and DataContext Controls A ListView C D B E A C E A B D F
Solution: Pub/sub-pattern Publisher 1 Subscriber 1 Messenger Publisher 2 Subscriber 2 Publisher 2 Subscriber 2
Solution: Pub/sub-pattern Publisher 1 Subscriber 1 Messenger Publisher 2 Subscriber 2 Publisher 2 Subscriber 2 ViewModels User controls
Solution: Pub/sub-pattern Publisher 1 Subscriber 1 Messenger Publisher 2 Subscriber 2 Publisher 2 Subscriber 2 MVVM Light Toolkit link
MVVM Quotes from the Wikipedia article “MVVM was designed to make use of data binding functions in WPF to better facilitate the separation of view layer development from the rest of the pattern by removing virtually all GUI code (“code-behind”) from the view layer”
Things that are impossible to do directly from the ViewModel • Give a visual element focus • Select text in a text box • Scroll an item into view • Show / hide Charms, App-or Navigation-bar
Things I thought were impossible, but were not • Trigger animations • Achieved through the use of databound visual states and attached properties • Alter the layout of a grid • You can databind Grid.ColumnDefinition.Width • You can databind visibility of sections within the grid
Making your own controls • Templates • Visual tree vs Logical tree • Custom dependency properties • Custom events
Example 2: Databinding • Binding update on property changed
Silverlight • No UpdateSourceTrigger
WinRT • No UpdateSourceTrigger • No BindingOperations.GetBinding()
Microsoft XAML technologies • WPF • Silverlight • Windows Phone 7 • Windows 8 (WinRT) Quality Time