Download presentation
Presentation is loading. Please wait.
Published byFranklin Harvey Modified over 9 years ago
1
W8 – Unwrapping the not- so-obvious Kevin Dockx | 05/03/2013
2
©2012 Microsoft Corporation. All rights reserved.
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
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
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
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
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
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
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
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
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
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
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.