52
Lessons learned fr om developing a Windows 8 Metro application in C# Frode Nilsen Nilsen Labs Tick i

Lessons learned from developing a Windows 8 Metro application in C#

  • Upload
    coye

  • View
    65

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Lessons learned from developing a Windows 8 Metro application in C#

Lessons learned from developing a Windows 8 Metro application in C#

Frode NilsenNilsen Labs

Ticki

Page 2: Lessons learned from developing a Windows 8 Metro application in C#

Agenda

Async-await done right Applying the MVVM pattern in Windows 8 Unscientific comparison of MS XAML technologies

Page 3: Lessons learned from developing a Windows 8 Metro application in C#
Page 4: Lessons learned from developing a Windows 8 Metro application in C#

The async-await pattern What it is What it not is Pitfalls Applying it properly

Page 5: Lessons learned from developing a Windows 8 Metro application in C#

Background

Feb 2012: Introduced in .Net 4.5 Spring 2011: Async CTP

June 2008: Task Parallel Library (TPL, .NET 4.0)

Page 6: Lessons learned from developing a Windows 8 Metro application in C#

The basics Two new c# keywords: async and await Makes asyncronous programming easy Makes asyncronous code clean

Page 7: Lessons learned from developing a Windows 8 Metro application in C#

The old way

Page 8: Lessons learned from developing a Windows 8 Metro application in C#

The new way

Page 9: Lessons learned from developing a Windows 8 Metro application in C#

The new way

12

Page 10: Lessons learned from developing a Windows 8 Metro application in C#

Defintion: Asynchrony

«Not at the same time»When method returns to the callerWhen the caller gets the return value

Threads

Page 11: Lessons learned from developing a Windows 8 Metro application in C#

Going deeper Async part 1, part 2 NDC 2012 presentation

Lucian Wischik (Microsoft Senior Program Manager) The Task Asynchronous Pattern (TAP) paper

by Stephen Toub Feb 2012 (Microsoft Async Guru) Progress reporting Cancellation Retrying Interleaving Throttling

Page 12: Lessons learned from developing a Windows 8 Metro application in C#

The power of asynchronous programming - example

Page 13: Lessons learned from developing a Windows 8 Metro application in C#

Option 1 – Serially

Rq 1 Rq 2 Rq 3

Time

Rq 4

Page 14: Lessons learned from developing a Windows 8 Metro application in C#

Option 2 – In Parallel

Rq 1

Rq 2

Rq 3

Time

Rq 4

Page 15: Lessons learned from developing a Windows 8 Metro application in C#

Request slot 2

Request slot 1

Option 3 – Throttled parallelism

Rq 1

Rq 2 Rq 3

Rq 4

Time

Google «AsyncSemaphore»

Page 16: Lessons learned from developing a Windows 8 Metro application in C#

DEMO – the powers of Tasks

Page 17: Lessons learned from developing a Windows 8 Metro application in C#

Async pitfalls 1 : Blocking threads

• Task.Wait()• Task.Result

Page 18: Lessons learned from developing a Windows 8 Metro application in C#

Async pitfalls 2 : Deadlocks

Page 19: Lessons learned from developing a Windows 8 Metro application in C#

Async pitfalls 3 : Exceptions

Page 20: Lessons learned from developing a Windows 8 Metro application in C#

Async pitfalls 4 : async void

Page 21: Lessons learned from developing a Windows 8 Metro application in C#

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

Page 22: Lessons learned from developing a Windows 8 Metro application in C#

MVVM in Windows 8 Recap of the gist Applying it to Windows 8 Pitfalls Tools and tips

Page 23: Lessons learned from developing a Windows 8 Metro application in C#

MVVM Model

View

ViewModel

Send notificationsData binding

and commands

Send notifications

Updates

From MSDN

Page 24: Lessons learned from developing a Windows 8 Metro application in C#

MVVM Model

View

ViewModel

Send notificationsData binding

and commands

Send notifications

UpdatesDATABINDING

Page 25: Lessons learned from developing a Windows 8 Metro application in C#

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

Page 26: Lessons learned from developing a Windows 8 Metro application in C#

MVVM

“MVVM is targeted at modern UI development platforms which support Event-driven programming”

Quotes from the Wikipedia article

Page 27: Lessons learned from developing a Windows 8 Metro application in C#

MVVM

“MVVM is targeted at modern UI development platforms which support Event-driven programming”

Quotes from the Wikipedia article

Page 28: Lessons learned from developing a Windows 8 Metro application in C#

DEMO - events

Page 29: Lessons learned from developing a Windows 8 Metro application in C#

Controls and DataContext

A B C

A

ViewModels

Controls

B C D E

A ListView

Page 30: Lessons learned from developing a Windows 8 Metro application in C#

Controls and DataContext

A B C

A

ViewModels

Controls

B C D E

A ListView

Page 31: Lessons learned from developing a Windows 8 Metro application in C#

Controls and DataContext

A B C

A

ViewModels

Controls

B C D E

A ListView

D E

F

Page 32: Lessons learned from developing a Windows 8 Metro application in C#

Controls and DataContext

AB C

A

ViewModels

Controls

B C D E

A ListView

D E

F

Page 33: Lessons learned from developing a Windows 8 Metro application in C#

Solution: Pub/sub-pattern

Messenger

Publisher 1

Publisher 2

Publisher 2

Subscriber 1

Subscriber 2

Subscriber 2

Page 34: Lessons learned from developing a Windows 8 Metro application in C#

Solution: Pub/sub-pattern

Messenger

Publisher 1

Publisher 2

Publisher 2

Subscriber 1

Subscriber 2

Subscriber 2

User controlsViewModels

Page 35: Lessons learned from developing a Windows 8 Metro application in C#

Solution: Pub/sub-pattern

Messenger

Publisher 1

Publisher 2

Publisher 2

Subscriber 1

Subscriber 2

Subscriber 2MVVM Light Toolkit

link

Page 36: Lessons learned from developing a Windows 8 Metro application in C#

DEMO – pub/sub

Page 37: Lessons learned from developing a Windows 8 Metro application in C#

MVVM

“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”

Quotes from the Wikipedia article

Page 38: Lessons learned from developing a Windows 8 Metro application in C#

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

Page 39: Lessons learned from developing a Windows 8 Metro application in C#

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

Page 40: Lessons learned from developing a Windows 8 Metro application in C#

Windows 8 XAML vs «other XAML»

Page 41: Lessons learned from developing a Windows 8 Metro application in C#

Example 1: Bundled controls

Page 42: Lessons learned from developing a Windows 8 Metro application in C#

Example 1: Bundled controlsWinForm SL Win8

Button X X XDatePicker X XDataGrid X XTreeView X XComboBox X XTabControl X XGrid X XStackPanel X XMediaElement X X

Page 44: Lessons learned from developing a Windows 8 Metro application in C#

Example 2: Databinding

Binding update on property changed

Page 45: Lessons learned from developing a Windows 8 Metro application in C#

WinForms

Page 46: Lessons learned from developing a Windows 8 Metro application in C#

WPF

Page 47: Lessons learned from developing a Windows 8 Metro application in C#

Silverlight• No UpdateSourceTrigger

Page 48: Lessons learned from developing a Windows 8 Metro application in C#

WinRT• No UpdateSourceTrigger• No BindingOperations.GetBinding()

Page 49: Lessons learned from developing a Windows 8 Metro application in C#

WinRT 2 (a slightly better alternative)

link

Page 50: Lessons learned from developing a Windows 8 Metro application in C#

Microsoft XAML technologies WPF Silverlight Windows Phone 7 Windows 8 (WinRT)

Time

Qua

lity

Page 51: Lessons learned from developing a Windows 8 Metro application in C#

Thank you

Mail: [email protected] Twitter: @nilzor Blog: www.nilzorblog.com

Page 52: Lessons learned from developing a Windows 8 Metro application in C#

Q & A