310 likes | 2.17k Views
Desktop development with WPF. Pete Brown | @pete_brown | http://10rem.net Windows Developer Platform Evangelist Microsoft 2-002. Windows 8 desktop opportunities. The coming wave An explosion of new desktop and laptop PCs with touch screens
E N D
Desktop development with WPF Pete Brown | @pete_brown | http://10rem.net Windows Developer Platform Evangelist Microsoft 2-002
Windows 8 desktop opportunities • The coming wave • An explosion of new desktop and laptop PCs with touch screens • More tablets and hybrid portable x86/64 devices supporting both desktop and Windows Store app models • Why desktop • Run on Windows 7 as well as Windows 8 • Access potentially unsafe APIs and devices • Integrate mixed UI code (e.g., WPF hosting Windows Forms)
Desktop development technologies WPF .NET Windows Forms .NET C++/Win32 Native Silverlight Visual Studio 2012 WPF, Windows Forms, C++ support in Visual Studio Express 2012 for Desktop Silverlight support in Visual Studio Express 2012 for Web
New Win32/COM API categories Assessment Execution Engine (AXE) Compression API (MSZIP, XPRESS, XPRESS_HUFF, LZMS) Data deduplication (backup/restore) Direct composition Direct manipulation DirectX Math Help API iSCSI Target API (WMI) Operation Recorder (Windows prefetch) Packaging and deployment for Windows Store apps SMB management User access logging User state management Web sockets Windows Connection Manager Windows Storage Management XAudio2 XInput
New Windows 8 desktop APIs • AccSetRunningUtilityState • AddDllDirectory • AddPointerInteractionContext • AddResourceAttributeAce • AddScopedPolicyIDAce • AddVirtualDiskParent • AsyncActionCompletedHandler • AuthzFreeCentralAccessPolicyCache • AuthzInitializeCompoundContext • AuthzInitializeRemoteResourceManager • AuthzInitializeResourceManagerEx • AuthzModifyClaims • AuthzModifySids • AuthzRegisterCapChangeNotification • AuthzSetAppContainerInformation • AuthzUnregisterCapChangeNotification • BCryptKeyDerivation • BreakMirrorVirtualDisk • BufferPointerPacketsInteractionContext • CertIsStrongHashToSign • CheckTokenCapability • CheckTokenMembershipEx • ClosePackageInfo • CoAllowUnmarshalerCLSID • CopyFile2 • CopyHelperAttribute • CopyRepairInfo • CopyRootCauseInfo • CoCreateInstanceFromApp • CoDecrementMTAUsage • CoEnterApplicationThreadLifetimeLoop • CoGetApplicationThreadReference • CoHandlePriorityEventsFromMessagePump • CoIncrementMTAUsage • CoRegisterChannelHook • CoWaitForMultipleObjects • CoSetMessageDispatcher • CreateAppContainerProfile • CreateFile2 • CreateInteractionContext • CreateRandomAccessStreamOnFile • CreateRandomAccessStreamOverStream • CreateStreamOverRandomAccessStream • CryptCATAdminAcquireContext2 • CryptCATAdminCalcHashFromFileHandle2 • CryptSIPGetCaps • D2D1CreateDevice • D2D1CreateDeviceContext • DCompositionCreateDevice • DCompositionCreateSurfaceHandle • DeleteAppContainerProfile • DeleteConnectedIdentity • DeleteSynchronizationBarrier • DeleteVirtualDiskMetadata • DeriveAppContainerSidFromAppContainerName • DestroyInteractionContext • DnsCancelQuery • DnsQueryEx • DwmRenderGesture • DwmShowContact • DwmTetherContact • DwmTransitionOwnedWindow • DXGIGetDebugInterface • EapPeerGetConfigBlobAndUserBlob • EnableMouseInPointer • EngineAdapterNotifyPowerChange • EnterSynchronizationBarrier • EnumerateVirtualDiskMetadata • EvaluateProximityToPolygon • EvaluateProximityToRect • EventSetInformation • FreeHelperAttributes • FreeRepairInfoExs • FreeRepairInfos • FreeRootCauseInfos • FreeUiInfo • FwpmConnectionCreateEnumHandle0 • FwpmConnectionDestroyEnumHandle0 • FwpmConnectionEnum0 • FwpmConnectionGetById0 • FwpmConnectionGetSecurityInfo0 • FwpmConnectionSetSecurityInfo0 • FwpmConnectionSubscribe0 • FwpmConnectionSubscriptionsGet0 • FwpmConnectionUnsubscribe0 • FwpmIPsecTunnelAdd2 • FwpmNetEventEnum2 • FwpmNetEventSubscribe1 • FwpmProviderContextAdd2 • FwpmProviderContextEnum2 • FwpmProviderContextGetById2 • FwpmProviderContextGetByKey2 • FwpmvSwitchEventsGetSecurityInfo0 • FwpmvSwitchEventsSetSecurityInfo0 • FwpmvSwitchEventSubscribe0 • FwpmvSwitchEventUnsubscribe0 • GetAddrInfoExCancel • GetAddrInfoExOverlappedResult • GetAppContainerFolderPath • GetAppContainerNamedObjectPath • GetAppContainerRegistryLocation • GetCertificateFromCred • GetCredentialKey • GetCrossSlideParameterInteractionContext • GetCurrentInputMessageSource • GetCurrentInputMessageSource • GetCurrentPackageFamilyName • GetCurrentPackageFullName • GetCurrentPackageId • GetCurrentPackageInfo • GetCurrentPackagePath • GetFirmwareType • GetInertiaParameterInteractionContext • GetInteractionConfigurationInteractionContext • GetIpNetworkConnectionBandwidthEstimates • GetMemoryErrorHandlingCapabilities • GetMouseWheelParameterInteractionContext • GetOverlappedResultEx • GetPackageFamilyName • GetPackageFullName • GetPackageId • GetPackageInfo • GetPackagePath • GetPackagesByPackageFamily • GetPointerCursorId • GetPointerDevice • GetPointerDeviceCursors • GetPointerDeviceProperties • GetPointerDeviceRects • GetPointerDevices • GetPointerFrameInfo • GetPointerFrameInfoHistory • GetPointerFramePenInfo • GetPointerFramePenInfoHistory • GetPointerFrameTouchInfo • GetPointerFrameTouchInfoHistory • GetPointerInfo • GetPointerInfoHistory • GetPointerPenInfo • GetPointerPenInfoHistory • GetPointerTouchInfo • GetPointerTouchInfoHistory • GetPointerType • GetProcessInformation • GetProcessMitigationPolicy • GetProcessReference • GetPropertyInteractionContext • GetRawPointerDeviceData • GetRestrictedErrorInfo • GetScaleFactorForDevice • GetServiceAccountPassword • GetStateInteractionContext • GetSystemTimePreciseAsFileTime • GetThemeAnimationProperty • GetThemeAnimationTransform • GetThemeTimingFunction • GetThreadInformation • GetUnpredictedMessagePos • GetVirtualDiskMetadata • GetWindowFeedbackSetting • HSTRING_UserFree • HSTRING_UserFree64 • HSTRING_UserMarshal • HSTRING_UserMarshal64 • HSTRING_UserSize • HSTRING_UserSize64 • HSTRING_UserUnmarshal • HSTRING_UserUnmarshal64 • HttpPrepareUrl • IAccessibilityDockingService • IAccessibilityDockingServiceCallback • IAccessibleHostingElementProviders • IAccessibleWindowlessControl • IAccessibleWindowlessSite • IActivationFactory • IAdvancedMediaCapture • IAdvancedMediaCaptureInitializationSettings • IAdvancedMediaCaptureSettings • IAgileObject • IAnnotationProvider • IApartmentShutdown • IApplicationActivationManager • IApplicationDesignModeSettings • IAppVisibility • IAppxBlockMapBlock • IAppxBlockMapBlocksEnumerator • IAppxBlockMapFile • IAppxBlockMapFilesEnumerator • IAppxBlockMapReader • IAppxFactory • IAppxFile • IAppxFilesEnumerator • IAppxManifestApplication • IAppxManifestApplicationsEnumerator • IAppxManifestDeviceCapabilitiesEnumerator • IAppxManifestPackageDependenciesEnumerator • IAppxManifestPackageDependency • IAppxManifestPackageId • IAppxManifestProperties • IAppxManifestReader • IAppxManifestResourcesEnumerator • IAppxPackageReader • IAppxPackageWriter • IAsyncAction • IAsyncActionProgressHandler<TProgress> • IAsyncActionWithProgress<TProgress> • IAsyncActionWithProgressCompletedHandler<TProgress> • IAsyncInfo • IAsyncOperation<TResult> • IAsyncOperationCompletedHandler<TResult> • IAsyncOperationProgressHandler • IAsyncOperationWithProgress • IAsyncOperationWithProgressCompletedHandler<TResult, TProgress> • IAudioClient2 • IAudioEndpointOffloadStreamMute • IAudioLfxControl • IBuffer • IBufferByteAccess • ICatalog • ICatalogRead • ICatalogReadWriteLock • IClosable • IConnectedIdentityProvider • IConnectedUser • IConnectedUserStore • IConnectionBrokerClient • IConnectionBrokerRequest • ICoreApplication • ICoreApplicationExit • ICoreApplicationInitialization • ICoreApplicationView • ICoreImmersiveApplication • ICredentialProviderCredential2 • ICredentialProviderCredentialEvents2 • ICredentialProviderCredentialWithFieldOptions • ICredentialProviderSetUserArray • ICredentialProviderUser • ICredentialProviderUserArray • ID2D1AnalysisTransform • ID2D1Bitmap1 • ID2D1BlendTransform • ID2D1BorderTransform • ID2D1ColorContext • ID2D1CommandList • ID2D1CommandSink • ID2D1ComputeInfo • ID2D1ComputeTransform • ID2D1ConcreteTransform • ID2D1Device • ID2D1DeviceContext • ID2D1Effect • ID2D1EffectContext • ID2D1EffectImpl • ID2D1Factory1 • ID2D1GpuRenderInfo • ID2D1GpuTransform • ID2D1GradientStopCollection1 • ID2D1Image • ID2D1ImageBrush • ID2D1OffsetTransform • ID2D1PathGeometry1 • ID2D1Properties • ID2D1RenderInfo • ID2D1ResourceTexture • ID2D1SourceTransform • ID2D1StrokeStyle1 • ID2D1Transform • ID2D1TransformGraph • ID2D1TransformNode • ID2D1VertexBuffer • ID3D11AuthenticatedChannel • ID3D11BlendState1 • ID3D11CryptoSession • ID3D11Device1 • ID3D11DeviceContext1 • ID3D11RasterizerState1 • ID3D11RefDefaultTrackingOptions • ID3D11RefTrackingOptions • ID3D11ShaderTrace • ID3D11ShaderTraceFactory • ID3D11TracingDevice • ID3D11VideoContext • ID3D11VideoDecoder • ID3D11VideoDecoderOutputView • ID3D11VideoDevice • ID3D11VideoProcessor • ID3D11VideoProcessorEnumerator • ID3D11VideoProcessorInputView • ID3D11VideoProcessorOutputView • ID3DDeviceContextState • ID3DUserDefinedAnnotation • IDataObjectAsyncCapability • IDataObjectProvider • IDataTransferManagerInterop • IDCompositionAnimation • IDCompositionClip • IDCompositionDevice • IDCompositionEffect • IDCompositionEffectGroup • IDCompositionMatrixTransform • IDCompositionMatrixTransform3D • IDCompositionRectangleClip • IDCompositionRotateTransform • IDCompositionRotateTransform3D • IDCompositionScaleTransform • IDCompositionScaleTransform3D • IDCompositionSkewTransform • IDCompositionSurface • IDCompositionTarget • IDCompositionTransform • IDCompositionTransform3D • IDCompositionTranslateTransform • IDCompositionTranslateTransform3D • IDCompositionVirtualSurface • IDCompositionVisual • IDefaultFolderMenuInitialize • IDesktopWallpaper • IDirectManipulationCompositor • IDirectManipulationContactHandler • IDirectManipulationContent • IDirectManipulationManager • IDirectManipulationPrimaryContent • IDirectManipulationUpdateHandler • IDirectManipulationUpdateManager • IDirectManipulationViewport • IDirectManipulationViewportEventHandler • IDragProvider • IDropTargetProvider • IDXGIAdapter2 • IDXGIDebug • IDXGIDevice2 • IDXGIDisplayControl • IDXGIFactory2 • IDXGIInfoQueue • IDXGIOutput1 • IDXGIOutputDuplication • IDXGIResource1 • IDXGISurface2 • IDXGISwapChain1 • IEffectivePermission2 • IEnumSpellingError • IErrorReportingSettings • IEvent • IEventCallback • IEventHandler<T> • IExecuteCommandApplicationHostEnvironment • IExecuteCommandHost • IFrameworkInputPane • IFrameworkInputPaneHandler • IFsrmClassificationManager2 • IHandlerActivationHost • IHandlerInfo • IHardwareAudioEngineBase • IHelpFilter • IHelpKeyValuePair • IIdentityStore2 • IImePlugInDictDictionaryList • IInitializeWithWindow • IInputPanelConfiguration • IInputPanelInvocationConfiguration • IInputStream • IInspectable • IIterable<T> • IIterator<T> • IkeextSaEnum2 • IkeextSaGetById2 • IKeyValuePair<K, V> • IKeyword • IKeywordCollection • ILocationPermissions • ILocationPower • IMap<K, V> • IMapChangedEventArgs<K> • IMapView<K, V> • IMbnDeviceService • IMbnDeviceServicesContext • IMbnDeviceServicesEvents • IMbnDeviceServicesManager • IMbnMultiCarrier • IMbnMultiCarrierEvents • IMF2DBuffer2 • IMFByteStreamCacheControl2 • IMFByteStreamProxyClassFactory • IMFByteStreamTimeSeek • IMFByteStreamTrident • IMFCaptureEngine • IMFCaptureEngineClassFactory • IMFCaptureEngineOnEventCallback • IMFCaptureEngineOnSampleCallback • IMFCapturePhotoSink • IMFCapturePreviewSink • IMFCaptureRecordSink • IMFCaptureSink • IMFCaptureSource • IMFDXGIBuffer • IMFDXGIDeviceManager • IMFImageSharingEngine • IMFMediaEngine • IMFMediaEngineClassFactory • IMFMediaEngineEx • IMFMediaEngineExtension • IMFMediaEngineNotify • IMFMediaEngineProtectedContent • IMFMediaEngineSrcElements • IMFMediaError • IMFMediaSharingEngine • IMFMediaSourceEx • IMFMediaTimeRange
New Windows 8 desktop APIs • IMFNetResourceFilter • IMFPluginControl2 • IMFProtectedEnvironmentAccess • IMFRealTimeClientEx • IMFSampleOutputStream • IMFSeekInfo • IMFSharingEngineClassFactory • IMFSignedLibrary • IMFSinkWriterEx • IMFSourceReaderEx • IMFSystemId • IMFVideoProcessorControl • IMFVideoSampleAllocatorEx • ImmDisableLegacyIME • IMsRdpClient8 • IMsRdpClientAdvancedSettings8 • IndexException • INetFwRule3 • INetworkConnectCost • INetworkConnectionCostEvents • INetworkCostManager • INetworkCostManagerEvents • InitializeSynchronizationBarrier • InitializeTouchInjection • InjectTouchInput • INoMarshal • InterlockedAddNoFence • InterlockedAddNoFence64 • InterlockedAnd16NoFence • InterlockedAnd64NoFence • InterlockedAnd8NoFence • InterlockedAndNoFence • InterlockedBitTestAndComplement64 • InterlockedBitTestAndResetAcquire • InterlockedBitTestAndResetRelease • InterlockedBitTestAndSetAcquire • InterlockedBitTestAndSetRelease • InterlockedCompareExchange128 • InterlockedCompareExchange16 • InterlockedCompareExchange16Acquire • InterlockedCompareExchange16NoFence • InterlockedCompareExchange16Release • InterlockedCompareExchangeNoFence • InterlockedCompareExchangeNoFence64 • InterlockedCompareExchangePointerNoFence • InterlockedDecrement16 • InterlockedDecrement16Acquire • InterlockedDecrement16NoFence • InterlockedDecrement16Release • InterlockedDecrementNoFence • InterlockedDecrementNoFence64 • InterlockedExchange16Acquire • InterlockedExchange16NoFence • InterlockedExchange8 • InterlockedExchangeAddNoFence • InterlockedExchangeAddNoFence64 • InterlockedExchangeNoFence • InterlockedExchangeNoFence64 • InterlockedExchangePointerNoFence • InterlockedIncrement16 • InterlockedIncrement16Acquire • InterlockedIncrement16NoFence • InterlockedIncrement16Release • InterlockedIncrementNoFence • InterlockedIncrementNoFence64 • InterlockedOr16NoFence • InterlockedOr64NoFence • InterlockedOr8NoFence • InterlockedOrNoFence • InterlockedPushListSListEx • InterlockedXor16NoFence • InterlockedXor64NoFence • InterlockedXor8NoFence • InterlockedXorNoFence • IObjectModelProvider • IObservableMap<K, V> • IObservableVector<T> • IOptionDescription • IOutputStream • IPackageDebugSettings • IPackageDebugSettings • IPlaybackManager • IPlaybackManagerEvents • IPlayToControl • IPlayToControllerClassFactory • IPlayToManagerDirect • IPlayToManagerInterop • IPlayToReceiverClassFactory • IPortableDeviceUnitsStream • IPrintManagerInterop • IPropertyValue • IPropertyValueStatics • IPsecKeyManagerAddAndRegister0 • IPsecKeyManagerGetSecurityInfoByKey0 • IPsecKeyManagerSetSecurityInfoByKey0 • IPsecKeyManagersGet0 • IPsecKeyManagerUnregisterAndDelete0 • IPsecSaContextSubscribe0 • IPsecSaContextSubscriptionsGet0 • IPsecSaContextUnsubscribe0 • IRandomAccessStream • IRawElementProviderHostingAccessibles • IRawElementProviderWindowlessSite • IRDPViewerRenderingSurface • IReference<T> • IReferenceArray<T> • IReferenceTracker • IReferenceTrackerHost • IReferenceTrackerManager • IReferenceTrackerTarget • IRemoteDesktopClient • IRemoteDesktopClientActions • IRemoteDesktopClientEvents • IRemoteDesktopClientSettings • IRestrictedErrorInfo • IRichEditUiaInformation • IRicheditUiaOverrides • IRicheditWindowlessAccessibility • IRoMetaDataLocator • IRoSimpleMetaDataBuilder • ISearchableApplication • ISearchManager2 • ISecurityInformation4 • IsImmersiveProcess • IsMouseInPointerEnabled • ISpellChecker • ISpellCheckerChangedEventHandler • ISpellCheckerFactory • ISpellCheckProvider • ISpellCheckProviderFactory • ISpellingError • ISpreadsheetItemProvider • ISpreadsheetProvider • IStylesProvider • ISuspendingDeferral • ISuspendingEventArgs • ISuspendingOperation • IsValidNLSVersion • ITextDisplays • ITextDocument2 • ITextFont2 • ITextHost2 • ITextPara2 • ITextProvider2 • ITextRange2 • ITextRow • ITextSelection2 • ITextServices2 • ITextStory • ITextStoryRanges2 • ITextStrings • ITfFnGetPreferredTouchKeyboardLayout • ITfIntegratableCandidateListUIElement • ITfFnSearchCandidateProvider • ITfThreadMgr2 • IThumbnailCachePrimer • IThumbnailSettings • ITopic • ITopicCollection • ITpmVirtualSmartCardManager • ITpmVirtualSmartCardManagerStatusCallback • ITraceRelogger • ITransformProvider2 • ItsPubPlugin2 • ITypedEventHandler<TSender, TArgs> • IUIAnimationInterpolator2 • IUIAnimationLoopIterationChangeHandler2 • IUIAnimationManager2 • IUIAnimationManagerEventHandler2 • IUIAnimationPrimitiveInterpolation • IUIAnimationPriorityComparison2 • IUIAnimationStoryboard2 • IUIAnimationStoryboardEventHandler2 • IUIAnimationTransition2 • IUIAnimationTransitionFactory2 • IUIAnimationTransitionLibrary2 • IUIAnimationVariable2 • IUIAnimationVariableChangeHandler2 • IUIAnimationVariableCurveChangeHandler2 • IUIAnimationVariableIntegerChangeHandler2 • IUIAutomation2 • IUIAutomationAnnotationPattern • IUIAutomationDragPattern • IUIAutomationDropTargetPattern • IUIAutomationElement2 • IUIAutomationObjectModelPattern • IUIAutomationSpreadsheetItemPattern • IUIAutomationSpreadsheetPattern • IUIAutomationStylesPattern • IUIAutomationTextChildPattern • IUIAutomationTextPattern2 • IUIAutomationTransformPattern2 • IUIEventingManager • IUIEventLogger • IUIFramework2 • IUPnPAsyncResult • IUPnPServiceAsync • IUPnPServiceDocumentAccess • IUPnPServiceEnumProperty • IUserDictionariesRegistrar • IVector<T> • IVectorChangedEventArgs • IVectorView<T> • IViewProvider • IViewProviderFactory • IVmApplicationHealthMonitor • IWeakReference • IWeakReferenceSource • IWebApplicationAuthoringMode • IWebApplicationHost • IWebApplicationNavigationEvents • IWebApplicationScriptEvents • IWebApplicationUIEvents • IWSDHttpAuthParameters • IWTSBitmapRenderer • IWTSBitmapRendererCallback • IWTSBitmapRenderService • IWTSPluginServiceProvider • IWTSServerChannel • IWTSServerChannelManager • IWTSVirtualChannelCallback2 • IXMLHTTPRequest2 • IXMLHTTPRequest2Callback • IXpsOMObjectFactory1 • IXpsOMPackage1 • IXpsOMPage1 • LoadPackagedLibrary • LsaGetAppliedCAPIDs • LsaLookupSids2 • MagGetFullscreenColorEffect • MagGetFullscreenTransform • MagGetInputTransform • MagSetFullscreenColorEffect • MagSetFullscreenTransform • MagSetInputTransform • MagShowSystemCursor • MapChangedEventHandler<K, V> • MAPISendMailHelper • MAPISendMailW • MetaDataGetDispenser • MFAllocateSerialWorkQueue • MFBeginRegisterWorkQueueWithMMCSSEx • MFCreate2DMediaBuffer • MFCreateAC3MediaSink • MFCreateADTSMediaSink • MFCreateCaptureEngine • MFCreateDXGIDeviceManager • MFCreateDXGISurfaceBuffer • MFCreateMediaBufferFromMediaType • MFCreateMediaExtensionActivate • MFCreateMFByteStreamOnStreamEx • MFCreateMFByteStreamWrapper • MFCreateMuxSink • MFCreateMuxSinkActivate • MFCreateStreamOnMFByteStream • MFCreateStreamOnMFByteStreamEx • MFCreateTranscodeTopologyFromByteStream • MFCreateVideoSampleAllocatorEx • MFGetAttributeString • MFGetContentProtectionSystemCLSID • MFGetWorkQueueMMCSSPriority • MFLockDXGIDeviceManager • MFLockSharedWorkQueue • MFMapDX9FormatToDXGIFormat • MFMapDXGIFormatToDX9Format • MFPutWaitingWorkItem • MFPutWorkItem2 • MFPutWorkItemEx2 • MFRegisterLocalByteStreamHandler • MFRegisterLocalSchemeHandler • MFRegisterPlatformWithMMCSS • MFUnlockDXGIDeviceManager • MFUnregisterPlatformFromMMCSS • MI_Application_Close • MI_Application_Initialize • MI_Application_NewDeserializer • MI_Application_NewDestinationOptions • MI_Application_NewHostedProvider • MI_Application_NewInstance • MI_Application_NewInstanceFromClass • MI_Application_NewOperationOptions • MI_Application_NewParameterSet • MI_Application_NewSerializer • MI_Application_NewSession • MI_Application_NewSubscriptionDeliveryOptions • MI_Class_Clone • MI_Class_Delete • MI_Class_GetClassName • MI_Class_GetClassQualifierSet • MI_Class_GetElement • MI_Class_GetElementAt • MI_Class_GetElementCount • MI_Class_GetMethod • MI_Class_GetMethodAt • MI_Class_GetMethodCount • MI_Class_GetNameSpace • MI_Class_GetParentClass • MI_Class_GetParentClassName • MI_Class_GetServerName • MI_Context_Canceled • MI_Context_ConstructInstance • MI_Context_ConstructParameters • MI_Context_GetCustomOption • MI_Context_GetCustomOptionAt • MI_Context_GetCustomOptionCount • MI_Context_GetLocale • MI_Context_GetLocalSession • MI_Context_GetNumberOption • MI_Context_GetStringOption • MI_Context_NewDynamicInstance • MI_Context_NewInstance • MI_Context_NewParameters • MI_Context_PostCimError • MI_Context_PostError • MI_Context_PostIndication • MI_Context_PostInstance • MI_Context_PostResult • MI_Context_PostResultWithError • MI_Context_PostResultWithMessage • MI_Context_PromptUser • MI_Context_RefuseUnload • MI_Context_RegisterCancel • MI_Context_RequestUnload • MI_Context_SetStringOption • MI_Context_ShouldContinue • MI_Context_ShouldProcess • MI_Context_WriteCimError • MI_Context_WriteDebug • MI_Context_WriteError • MI_Context_WriteMessage • MI_Context_WriteProgress • MI_Context_WriteStreamParameter • MI_Context_WriteVerbose • MI_Context_WriteWarning • MI_Deserializer_Class_GetClassName • MI_Deserializer_Class_GetParentClassName • MI_Deserializer_Close • MI_Deserializer_DeserializeClass • MI_Deserializer_DeserializeInstance • MI_Deserializer_Instance_GetClassName • MI_DestinationOptions_AddDestinationCredentials • MI_DestinationOptions_AddProxyCredentials • MI_DestinationOptions_Clone • MI_DestinationOptions_Delete • MI_DestinationOptions_GetCertCACheck • MI_DestinationOptions_GetCertCNCheck • MI_DestinationOptions_GetCertRevocationCheck • MI_DestinationOptions_GetCredentialsAt • MI_DestinationOptions_GetCredentialsCount • MI_DestinationOptions_GetCredentialsPasswordAt • MI_DestinationOptions_GetDataLocale • MI_DestinationOptions_GetDestinationPort • MI_DestinationOptions_GetEncodePortInSPN • MI_DestinationOptions_GetHttpUrlPrefix • MI_DestinationOptions_GetImpersonationType • MI_DestinationOptions_GetMaxEnvelopeSize • MI_DestinationOptions_GetNumber • MI_DestinationOptions_GetOption • MI_DestinationOptions_GetOptionAt • MI_DestinationOptions_GetOptionCount • MI_DestinationOptions_GetPacketEncoding • MI_DestinationOptions_GetPacketIntegrity • MI_DestinationOptions_GetPacketPrivacy • MI_DestinationOptions_GetProxyType • MI_DestinationOptions_GetString • MI_DestinationOptions_GetTimeout • MI_DestinationOptions_GetTransport • MI_DestinationOptions_GetUILocale • MI_DestinationOptions_SetCertCACheck • MI_DestinationOptions_SetCertCNCheck • MI_DestinationOptions_SetCertRevocationCheck • MI_DestinationOptions_SetDataLocale • MI_DestinationOptions_SetDestinationPort • MI_DestinationOptions_SetEncodePortInSPN • MI_DestinationOptions_SetHttpUrlPrefix • MI_DestinationOptions_SetImpersonationType • MI_DestinationOptions_SetMaxEnvelopeSize • MI_DestinationOptions_SetNumber • MI_DestinationOptions_SetPacketEncoding • MI_DestinationOptions_SetPacketIntegrity • MI_DestinationOptions_SetPacketPrivacy • MI_DestinationOptions_SetProxyType • MI_DestinationOptions_SetString • MI_DestinationOptions_SetTimeout • MI_DestinationOptions_SetTransport • MI_DestinationOptions_SetUILocale • MI_Filter_Evaluate • MI_Filter_GetExpression • MI_HostedProvider_Close • MI_HostedProvider_GetApplication • MI_Instance_AddElement • MI_Instance_ClearElement • MI_Instance_ClearElementAt • MI_Instance_Clone • MI_Instance_Delete • MI_Instance_Destruct • MI_Instance_GetClass • MI_Instance_GetClassName • MI_Instance_GetElement • MI_Instance_GetElementAt • MI_Instance_GetElementCount • MI_Instance_GetNameSpace • MI_Instance_GetServerName • MI_Instance_IsA • MI_Instance_SetElement • MI_Instance_SetElementAt • MI_Instance_SetNameSpace • MI_Instance_SetServerName
New Windows 8 desktop APIs • MI_Operation_Cancel • MI_Operation_Close • MI_Operation_GetClass • MI_Operation_GetIndication • MI_Operation_GetInstance • MI_Operation_GetSession • MI_OperationOptions_Clone • MI_OperationOptions_Delete • MI_OperationOptions_DisableChannel • MI_OperationOptions_EnableChannel • MI_OperationOptions_GetEnabledChannels • MI_OperationOptions_GetForceFlagPromptUserMode • MI_OperationOptions_GetNumber • MI_OperationOptions_GetOption • MI_OperationOptions_GetOptionAt • MI_OperationOptions_GetOptionCount • MI_OperationOptions_GetPromptUserMode • MI_OperationOptions_GetProviderArchitecture • MI_OperationOptions_GetResourceUriPrefix • MI_OperationOptions_GetString • MI_OperationOptions_GetTimeout • MI_OperationOptions_GetUseMachineID • MI_OperationOptions_GetWriteErrorMode • MI_OperationOptions_SetCustomOption • MI_OperationOptions_SetForceFlagPromptUserMode • MI_OperationOptions_SetNumber • MI_OperationOptions_SetPromptUserMode • MI_OperationOptions_SetProviderArchitecture • MI_OperationOptions_SetResourceUriPrefix • MI_OperationOptions_SetString • MI_OperationOptions_SetTimeout • MI_OperationOptions_SetUseMachineID • MI_OperationOptions_SetWriteErrorMode • MI_ParameterSet_GetMethodReturnType • MI_ParameterSet_GetParameter • MI_ParameterSet_GetParameterAt • MI_ParameterSet_GetParameterCount • MI_PropertySet_AddElement • MI_PropertySet_Clear • MI_PropertySet_Clone • MI_PropertySet_ContainsElement • MI_PropertySet_Delete • MI_PropertySet_Destruct • MI_PropertySet_GetElementAt • MI_PropertySet_GetElementCount • MI_QualifierSet_GetQualifier • MI_QualifierSet_GetQualifierAt • MI_QualifierSet_GetQualifierCount • MI_Serializer_Close • MI_Serializer_SerializeClass • MI_Serializer_SerializeInstance • MI_Server_GetSystemName • MI_Server_GetVersion • MI_Session_AssociatorInstances • MI_Session_Close • MI_Session_CreateInstance • MI_Session_DeleteInstance • MI_Session_EnumerateClasses • MI_Session_EnumerateInstances • MI_Session_GetApplication • MI_Session_GetClass • MI_Session_GetInstance • MI_Session_Invoke • MI_Session_ModifyInstance • MI_Session_QueryInstances • MI_Session_ReferenceInstances • MI_Session_Subscribe • MI_Session_TestConnection • MI_SubscriptionDeliveryOptions_AddDeliveryCredentials • MI_SubscriptionDeliveryOptions_Clone • MI_SubscriptionDeliveryOptions_Delete • MI_SubscriptionDeliveryOptions_GetBookmark • MI_SubscriptionDeliveryOptions_GetCredentialsAt • MI_SubscriptionDeliveryOptions_GetCredentialsCount • MI_SubscriptionDeliveryOptions_GetCredentialsPasswordAt • MI_SubscriptionDeliveryOptions_GetDateTime • MI_SubscriptionDeliveryOptions_GetDeliveryDestination • MI_SubscriptionDeliveryOptions_GetDeliveryPortNumber • MI_SubscriptionDeliveryOptions_GetDeliveryRetryAttempts • MI_SubscriptionDeliveryOptions_GetDeliveryRetryInterval • MI_SubscriptionDeliveryOptions_GetExpirationTime • MI_SubscriptionDeliveryOptions_GetHeartbeatInterval • MI_SubscriptionDeliveryOptions_GetInterval • MI_SubscriptionDeliveryOptions_GetMaximumLatency • MI_SubscriptionDeliveryOptions_GetNumber • MI_SubscriptionDeliveryOptions_GetOption • MI_SubscriptionDeliveryOptions_GetOptionAt • MI_SubscriptionDeliveryOptions_GetOptionCount • MI_SubscriptionDeliveryOptions_GetString • MI_SubscriptionDeliveryOptions_SetBookmark • MI_SubscriptionDeliveryOptions_SetDateTime • MI_SubscriptionDeliveryOptions_SetDeliveryDestination • MI_SubscriptionDeliveryOptions_SetDeliveryPortNumber • MI_SubscriptionDeliveryOptions_SetDeliveryRetryAttempts • MI_SubscriptionDeliveryOptions_SetDeliveryRetryInterval • MI_SubscriptionDeliveryOptions_SetExpirationTime • MI_SubscriptionDeliveryOptions_SetHeartbeatInterval • MI_SubscriptionDeliveryOptions_SetInterval • MI_SubscriptionDeliveryOptions_SetMaximumLatency • MI_SubscriptionDeliveryOptions_SetNumber • MI_SubscriptionDeliveryOptions_SetString • MI_Utilities_CimErrorFromErrorCode • MI_Utilities_MapErrorToExtendedError • MI_Utilities_MapErrorToMiErrorCategory • MirrorVirtualDisk • NCryptCloseProtectionDescriptor • NCryptCreateProtectionDescriptor • NCryptGetProtectionDescriptorInfo • NCryptKeyDerivation • NCryptProtectSecret • NCryptQueryProtectionDescriptorName • NCryptRegisterProtectionDescriptorName • NCryptStreamClose • NCryptStreamOpenToProtect • NCryptStreamOpenToUnprotect • NCryptStreamUpdate • NCryptUnprotectSecret • NdfCreateNetConnectionIncident • NeedCurrentDirectoryForExePath • NetCreateProvisioningPackage • NetRequestProvisioningPackageInstall • NetworkIsolationDiagnoseConnectFailureAndGetInfo • NetworkIsolationEnumAppContainers • NetworkIsolationEnumerateAppContainerRules • NetworkIsolationFreeAppContainers • NetworkIsolationGetAppContainerConfig • NetworkIsolationRegisterForAppContainerChanges • NetworkIsolationSetAppContainerConfig • NetworkIsolationSetupAppContainerBinaries • NetworkIsolationUnregisterForAppContainerChanges • OfflineFilesQueryStatusEx • OfflineFilesStart • OnProfileLoaded • OpenPackageInfoByFullName • PackageFamilyNameFromFullName • PackageFamilyNameFromId • PackageFullNameFromId • PackageIdFromFullName • PackageNameAndPublisherIdFromFamilyName • PackTouchHitTestingProximityEvaluation • PathAllocCanonicalize • PathAllocCombine • PathCchAddBackslash • PathCchAddBackslashEx • PathCchAddExtension • PathCchAppend • PathCchAppendEx • PathCchCanonicalize • PathCchCanonicalizeEx • PathCchCombine • PathCchCombineEx • PathCchFindExtension • PathCchIsRoot • PathCchRemoveBackslash • PathCchRemoveBackslashEx • PathCchRemoveExtension • PathCchRemoveFileSpec • PathCchRenameExtension • PathCchSkipRoot • PathCchStripPrefix • PathCchStripToRoot • PathIsUNCEx • PeerDistClientGetInformationByHandle • PeerDistGetOverlappedResult • PeerDistGetStatusEx • PeerDistRegisterForStatusChangeNotificationEx • PeerDistServerOpenContentInformationEx • PowerDeterminePlatformRoleEx • PowerRegisterSuspendResumeNotification • PowerUnregisterSuspendResumeNotification • PrefetchVirtualMemory • ProcessBufferedPacketsInteractionContext • ProcessInertiaInteractionContext • ProcessPointerFramesInteractionContext • PxeDhcpv6AppendOption • PxeDhcpv6AppendOptionRaw • PxeDhcpv6CreateRelayRepl • PxeDhcpv6GetOptionValue • PxeDhcpv6GetVendorOptionValue • PxeDhcpv6Initialize • PxeDhcpv6IsValid • PxeDhcpv6ParseRelayForw • PxeGetServerInfoEx • QueryServiceDynamicInformation • RegisterAppInstance • RegisterBadMemoryNotification • RegisterOutputCallbackInteractionContext • RegisterPointerDeviceNotifications • RegisterPointerInputTarget • RegisterScaleChangeNotifications • RegisterTouchHitTestingWindow • RemoveDllDirectory • RemovePointerInteractionContext • ResetInteractionContext • ResizeVirtualDisk • RevokeScaleChangeNotifications • RIOCloseCompletionQueue • RIOCreateCompletionQueue • RIOCreateRequestQueue • RIODequeueCompletion • RIODeregisterBuffer • RIONotify • RIOReceive • RIOReceiveEx • RIORegisterBuffer • RIOResizeCompletionQueue • RIOResizeRequestQueue • RIOSend • RIOSendEx • RoActivateInstance • RoCaptureErrorContext • RoFailFastWithErrorContext • RoFreeParameterizedTypeExtra • RoGetActivatableClassRegistration • RoGetActivationFactory • RoGetBufferMarshaler • RoGetErrorReportingFlags • RoGetMetaDataFile • RoGetParameterizedTypeInstanceIID • RoGetServerActivatableClasses • RoInitialize • RoOriginateError • RoOriginateErrorW • RoParameterizedTypeExtraGetTypeSignature • RoParseTypeName • RoRegisterActivationFactories • RoRegisterForApartmentShutdown • RoResolveNamespace • RoResolveRestrictedErrorInfoReference • RoRevokeActivationFactories • RoSetErrorReportingFlags • RoTransformError • RoTransformErrorW • RoUninitialize • RoUnregisterForApartmentShutdown • RtlAddGrowableFunctionTable • RtlDeleteGrowableFunctionTable • RtlGrowFunctionTable • SCardGetDeviceTypeId • SCardGetReaderDeviceInstanceId • SCardGetReaderIcon • SCardListReadersWithDeviceInstanceId • SensorAdapterNotifyPowerChange • SetCoalescableTimer • SetCrossSlideParametersInteractionContext • SetDefaultDllDirectories • SetInertiaParameterInteractionContext • SetInteractionConfigurationInteractionContext • SetMouseWheelParameterInteractionContext • SetPivotInteractionContext • SetProcessInformation • SetProcessMitigationPolicy • SetProcessReference • SetPropertyInteractionContext • SetRestrictedErrorInfo • SetThreadInformation • SetVirtualDiskMetadata • SetWindowFeedbackSetting • SetWindowFeedbackSettings • SignerSignEx2 • SkipPointerFrameMessages • SLActivateProduct • SLClose • SLConsumeRight • SLDepositMigrationBlob • SLDepositOfflineConfirmationId • SLDepositOfflineConfirmationIdEx • SLFireEvent • SLGatherMigrationBlob • SLGenerateOfflineInstallationId • SLGenerateOfflineInstallationIdEx • SLGetApplicationInformation • SLGetApplicationPolicy • SLGetAuthenticationResult • SLGetGenuineInformationEx • SLGetInstalledProductKeyIds • SLGetLicense • SLGetLicenseFileId • SLGetLicenseInformation • SLGetLicensingStatusInformation • SLGetPKeyId • SLGetPKeyInformation • SLGetPolicyInformation • SLGetPolicyInformationDWORD • SLGetProductSkuInformation • SLGetReferralInformation • SLGetServerStatus • SLGetServiceInformation • SLGetSLIDList • SLInstallLicense • SLInstallProofOfPurchase • SLInstallProofOfPurchaseEx • SLLoadApplicationPolicies • SLOpen • SLPersistApplicationPolicies • SLPersistRTSPayloadOverride • SLReArm • SLRegisterEvent • SLSetAuthenticationData • SLSetCurrentProductKey • SLUninstallLicense • SLUninstallProofOfPurchase • SLUnloadApplicationPolicies • SLUnregisterEvent • SslGetServerIdentity • SspiDecryptAuthIdentityEx • SspiEncryptAuthIdentityEx • StopInteractionContext • StorageAdapterNotifyPowerChange • TdhCloseDecodingHandle • TdhGetDecodingParameter • TdhGetWppMessage • TdhGetWppProperty • TdhLoadManifestFromBinary • TdhOpenDecodingHandle • TdhSetDecodingParameter • TKBLayoutType • TraceQueryInformation • UiaDisconnectAllProviders • UiaDisconnectProvider • UiaIAccessibleFromProvider • UiaProviderForNonClient • UiaProviderFromIAccessible • UnregisterBadMemoryNotification • UnregisterPointerInputTarget • UtilAssembleStringsWithAlloc • UtilLoadStringWithAlloc • UtilStringCopyWithAlloc • VectorChangedEventHandler<T> • WaitOnAddress • WakeByAddressAll • WakeByAddressSingle • WcmFreeMemory • WcmGetProfileList • WcmQueryProperty • WcmSetProfileList • WcmSetProperty • WdsBpParseInitializev6 • WdsCliGetDriverQueryXml • WdsCliObtainDriverPackagesEx • WebSocketAbortHandle • WebSocketBeginClientHandshake • WebSocketBeginServerHandshake • WebSocketCompleteAction • WebSocketCreateClientHandle • WebSocketCreateServerHandle • WebSocketDeleteHandle • WebSocketEndClientHandshake • WebSocketEndServerHandshake • WebSocketGetAction • WebSocketReceive • WebSocketSend • WFDCancelOpenSession • WFDCloseHandle • WFDCloseSession • WFDOpenHandle • WFDOpenLegacySession • WFDStartOpenSession • WFDUpdateDeviceVisibility • WinBioAsyncEnumBiometricUnits • WinBioAsyncEnumDatabases • WinBioAsyncEnumServiceProviders • WinBioAsyncMonitorFrameworkChanges • WinBioAsyncOpenFramework • WinBioAsyncOpenSession • WinBioCloseFramework • WindowsCompareStringOrdinal • WindowsConcatString • WindowsCreateString • WindowsCreateStringReference • WindowsDeleteString • WindowsDeleteStringBuffer • WindowsDuplicateString • WindowsGetStringLen • WindowsGetStringRawBuffer • WindowsInspectString • WindowsIsStringEmpty • WindowsPreallocateStringBuffer • WindowsPromoteStringBuffer • WindowsReplaceString • WindowsStringHasEmbeddedNull • WindowsSubstring • WindowsSubstringWithSpecifiedLength • WindowsTrimStringEnd • WindowsTrimStringStart • WinHttpCreateProxyResolver • WinHttpFreeProxyResult • WinHttpGetProxyForUrlEx • WinHttpGetProxyResult • WinHttpResetAutoProxy • WinHttpWebSocketClose • WinHttpWebSocketCompleteUpgrade • WinHttpWebSocketQueryCloseStatus • WinHttpWebSocketReceive • WinHttpWebSocketSend • WinHttpWebSocketShutdown • WSManConnectShell • WSManConnectShellCommand • WSManCreateShellEx • WSManDisconnectShell • WSManInitialize • WSManReconnectShell • WSManReconnectShellCommand • WSManRunShellCommandEx • WTSEnableChildSessions • WTSGetChildSessionId • WTSIsChildSessionsEnabled • WTSSetRenderHint
New features for WPF 4.5 Stronger Portable Class Library (PCL) support for multi-targeting New async and await and Task<T> support Built-in ribbon and ribbon window Data binding update delay Static property binding and change notification Event weak references Binding expression information INotifyDataErrorInfo ICustomTypeProvider Accessing collections on non-UI threads Live shaping of collections VirtualizingPanel support for pixel scrolling Bug fixes, performance improvements, and more Tons of other .NET 4.5-wide improvements and features
Likely sharing/multi-targeting scenarios .NET Server App .NET Desktop App Windows Store App Windows Phone App Shared viewmodel Shared model, logic, rules, etc.
Approaches Conditional compilation and linked files Portable class libraries • No runtime support required • All in the tooling • Some additional work for the developer • Built into the tooling and runtime • Expanded capabilities in .NET 4.5 • Easiest for developers
Conditional compilation • By default, WinRT apps define NETFX_CORE • More info in MSDN Magazine Windows 8 Special Issue: http://bit.ly/MsdnWin8Pmb #if NETFX_CORE using Windows.UI.Xaml; #else using System.Windows.Xaml; #endif
Portable Class Libraries • PCL is supported across a wide range of .NET client targets More details: http://bit.ly/NetPCL PCL also supports Xbox
Portable Class Libraries • Dedicated project type in Visual Studio 2012
Multi-targeting with PCL • Demo
async and await • Together, greatly simplifies asynchronous code • Especially suitable for networking operations • Relies on • New C# language feature • Task<T> and the Task Parallel Library • Compiler does the hard work. See my analysis of the IL: http://bit.ly/asyncstatemachine
Tooling support • Visual Studio 2012 now generates awaitable proxies for service references in .NET 4.5
Asynchronous calls • Demo
Binding to static properties • Change notification following INotifyPropertyChanged pattern, but without the explicit interface Target: Property="{Binding Path=(namespace:class.property)}" Source: public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
New BindingExpression APIs • New APIs for accessing binding expression information • ResolvedSource(source object) • ResolvedSourcePropertyName (property) • Target (target object) • TargetProperty (target property) • more
Binding delay • Update a value only after it stabilizes to reduce the chatter across the binding system <Slider x:Name="ValueSlider" Minimum="0" Maximum="100" Margin="20" Height="25" Value="{Binding ElementName=ValueText, Delay=500, Path=Text, Mode=TwoWay}" /> <TextBoxx:Name="ValueText" Text="50" Width="100" Height="50" FontSize="20" HorizontalAlignment="Center" />
Binding enhancements • Demo
List virtualization • Attached property for ItemsControl elements Pixel or Item VirtualizingPanel.ScrollUnit="Pixel" VirtualizingPanel.CacheLength="2" VirtualizingPanel.CacheLengthUnit="Page" Pixel, Item, or Page
Live data shaping with DataGrid • Sorted collection changes intelligently applied to DataGrid • Including property changes for elements in the collection • Requires a CollectionView • Set sort/filter/group descriptions • Tell it which fields to watch • Tell it you want to live sort/filter/group • Keep performance in mind
Virtualization and shaping • Demo
Weak event references • Built-in support for the Weak Event Pattern • Use when listener doesn’t know when to unhook event handler • Helps avoid memory leaks • Generic WeakEventManager • Uses reflection • Flexible, but not as efficient • Derive your own for more runtime efficiency
Collection synchronization • Before • Collections could not be modified except on creating thread • Lots of dispatcher calls • Now • Get a lock for the collection • Enable synchronization • Update it from any thread
Collection synchronization • class MainViewModel • { • public ObservableCollection<Stock> Stocks { get; private set; } • private object _stocksLock= new object(); • public MainViewModel() • { • Stocks = new ObservableCollection<Stock>(); • BindingOperations.EnableCollectionSynchronization • (Stocks, _stocksLock); • } • } Provide lock object Enable Synchronization
Collection synchronization • Demo