Presentation is loading. Please wait.

Presentation is loading. Please wait.

W8 – Unwrapping the not- so-obvious Kevin Dockx | 05/03/2013.

Similar presentations


Presentation on theme: "W8 – Unwrapping the not- so-obvious Kevin Dockx | 05/03/2013."— Presentation transcript:

1 W8 – Unwrapping the not- so-obvious Kevin Dockx | 05/03/2013

2 ©2012 Microsoft Corporation. All rights reserved.

3

4 Agenda Navigation, Suspension Manager & complex types Manipulating the navigation stack Handling exceptions in awaitable methods… that aren’t awaited Implementing a Variable Sized Grid Incrementally loading data Debugging background tasks

5 Agenda Can you get local host access? Async & Await: there’s more to it Performance tips & tricks The most important tip of this session Q&A

6

7 Suspension manager? Implementation included in Store Apps Allows you to save & restore state of a View Makes it easy to support PLM for simple apps, but for larger apps, you’ll probably want your own way to handle PLM

8 Suspension manager? Saves and restores the navigation state of the Frame Crashes when you pass in a complex object private static void SaveFrameNavigationState(Frame frame) { var frameState = SessionStateForFrame(frame); frameState["Navigation"] = frame.GetNavigationState(); }

9 Support complex objects? Simple approach: pass in simple types If you must: (de)serialize yourself JsonHelper class JsonHelper.ToJson when navigating JsonHelper.FromJson in LoadState

10 Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo

11

12 Manipulating the Navigation Stack Why would you want to do this? Typically: showing a disclaimer, an initial wizard, … Check for value in Application Settings to see if page has to be shown Use Frame.SetNavigationState(“1,0,0”) to remove all pages from the stack

13 Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo

14

15 Exceptions in Async methods Awaitable methods aren’t always awaited In such a case, when Exception happens => NOT caught by App_UnhandledException What if you still want to know about it? Handle the TaskScheduler.UnobservedTaskException event

16 Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo

17

18 Implementing a VariableSizedWrapGrid Create your own GridView class, inherit from GridView Override PrepareContainerForItemOverride Set RowSpan & ColumnSpan VariableSizedWrapGrid.SetRowSpan VariableSizedWrapGrid.SetColumnSpan

19 Implementing a VariableSizedWrapGrid In XAML, use the newly created GridView Set the ItemPanelTemplate to a VariableSizedWrapGrid Optionally define the orientation Optionally define the maximum number of rows/columns Typically, define ItemHeight & ItemWidth

20 Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo

21

22 Incrementally loading data An old trick… Create a style for your ListViewBase (ListView, GridView) Handle the ScrollViewers’ ViewChanged event, check the offset value … a better implementation Bind to a collection that supports incremental loading Create a collection, inherit from ObservableCollection Implement ISupportIncrementalLoading

23 Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo

24

25 Debugging a Background Task Look for the Debug Location Toolbar It’s hidden by default!

26 Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo

27

28 Localhost access? No. And there’s a good reason for that. Did I say no? I meant yes. Due to a loopback rule, access to localhost is restricted When you’re in Visual Studio, your app is exempted from this loopback rule => Allow Local Network loopback You can manually exempt your app, using CheckNetIsolation.exe: CheckNetIsolation.exe LoopbackExempt –a –p=AppID

29

30 Async & Await Support Cancellation Accept a Cancellation Token in your method signature Check for cancellation in that method Handle OperationCancelledException

31 Async & Await UI thread marshalling is what you get for free Do you always want this? How can you avoid this? await YourAsyncMethod().ConfigureAwait(false);

32 Async & Await Waiting for Any or All Tasks to complete var firstCompleted = await Task.WhenAny( SomeAwaitableMethod1(), SomeAwaitableMethod2(), SomeAwaitableMethod3()); => returns the first completed task result var allCompleted = await Task.WhenAll( SomeAwaitableMethod1(), SomeAwaitableMethod2(), SomeAwaitableMethod3()); => returns a list of all results of all tasks

33

34 Performance tip #1 Obvious, but maybe not so much: check performance in Release Builds Writing to the output window slows down your app tremendously Use the Performance Profiler

35 Peformance tip #2 Use the Async & Await tips Cancel running operations when not needed Execute Tasks in Parallel when possible Do not marshal to the UI thread when it’s not necessary

36 Performance tip #3 Reduce memory consumption Obvious? Yes, but for an additional reason The less memory your app uses, the more likely it is to stay in memory instead of being terminated, ensuring a faster restart after being suspended

37 Performance tip #4 Learn about XAML parsing Do not load resources that aren’t necessary Resource Dictionaries are fully parsed, even though your page might only use one resource of it Your start page shouldn’t use application-wide dictionaries If you use a resource throughout your app, put it in Application If you don’t, only reference that dictionary on the pages it is used, or even in the page-specific resource dictionary

38 Performance tip #4 Optimize element count Don’t write this: But write this:

39 Performance tip #4 Reuse brushes Don’t write this: Write this: <Button Content="Submit" Foreground=“ {StaticResource TextColor}" />

40 Performance tip #4 Minimize redrawing to the same place on the screen Don’t write this

41 Performance tip #4 But write this: There’s more: http://msdn.microsoft.com/en- us/library/windows/apps/hh994641.aspxhttp://msdn.microsoft.com/en- us/library/windows/apps/hh994641.aspx

42

43 Régis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Hire a designer.

44 t Q&A

45 © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentations. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. Thank you for coming! Feedback can be given via mobile or laptop through techdays.fi seminar schedule. techdays.fi Example #td2013fi


Download ppt "W8 – Unwrapping the not- so-obvious Kevin Dockx | 05/03/2013."

Similar presentations


Ads by Google