Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Speech / Src / Internal / SapiInterop / EventNotify.cs / 1 / EventNotify.cs
//------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------- using System; using System.Diagnostics; using System.Speech.Internal.SapiInterop; using System.Threading; using System.Speech.AudioFormat; using System.Collections.Generic; namespace System.Speech.Internal.SapiInterop { internal class SpNotifySink : ISpNotifySink { public SpNotifySink (EventNotify eventNotify) { _eventNotifyReference = new WeakReference (eventNotify); } void ISpNotifySink.Notify () { EventNotify eventNotify = (EventNotify) _eventNotifyReference.Target; if (eventNotify != null) { ThreadPool.QueueUserWorkItem (new WaitCallback (eventNotify.SendNotification)); } } private WeakReference _eventNotifyReference; } /// Dispatches events from ISpEventSource to DispatchEventDelegate on a thread /// compatible with the application model of the thread that created this object. internal class EventNotify { //******************************************************************* // // Constructors // //******************************************************************* #region Constructors internal EventNotify (ISpEventSource sapiEventSource, IAsyncDispatch dispatcher, bool additionalSapiFeatures) { // Remember event source _sapiEventSourceReference = new WeakReference (sapiEventSource); _dispatcher = dispatcher; _additionalSapiFeatures = additionalSapiFeatures; // Start listening to events from sapiEventSource. _notifySink = new SpNotifySink (this); sapiEventSource.SetNotifySink (_notifySink); } #endregion Constructors //******************************************************************** // // Internal Methods // //******************************************************************* #region Internal Methods // Finalizer is not required since ISpEventSource and AsyncOperation both implement appropriate finalizers. internal void Dispose () { lock (this) { // Since we are explicitly calling Dispose(), sapiEventSource (RCW) will normally be alive. // If Dispose() is called from a finalizer this may not be the case so check for null. if (_sapiEventSourceReference != null) { ISpEventSource sapiEventSource = (ISpEventSource) _sapiEventSourceReference.Target; if (sapiEventSource != null) { // Stop listening to events from sapiEventSource. sapiEventSource.SetNotifySink (null); _notifySink = null; } } _sapiEventSourceReference = null; } } internal void SendNotification (object ignored) { lock (this) { // Call dispatchEventDelegate for each SAPI event currently queued. if (_sapiEventSourceReference != null) { ISpEventSource sapiEventSource = (ISpEventSource) _sapiEventSourceReference.Target; if (sapiEventSource != null) { ListspeechEvents = new List (); SpeechEvent speechEvent; while (null != (speechEvent = SpeechEvent.TryCreateSpeechEvent (sapiEventSource, _additionalSapiFeatures, _audioFormat))) { speechEvents.Add (speechEvent); } _dispatcher.Post (speechEvents.ToArray ()); } } } } #endregion Methods //******************************************************************** // // Internal Properties // //******************************************************************** #region Internal Properties internal SpeechAudioFormatInfo AudioFormat { set { _audioFormat = value; } } #endregion Methods //******************************************************************* // // Private Methods // //******************************************************************** #region Private Methods #endregion //******************************************************************* // // Private Fields // //******************************************************************* #region Private Fields private IAsyncDispatch _dispatcher; private WeakReference _sapiEventSourceReference; private bool _additionalSapiFeatures; private SpeechAudioFormatInfo _audioFormat; private ISpNotifySink _notifySink; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------- using System; using System.Diagnostics; using System.Speech.Internal.SapiInterop; using System.Threading; using System.Speech.AudioFormat; using System.Collections.Generic; namespace System.Speech.Internal.SapiInterop { internal class SpNotifySink : ISpNotifySink { public SpNotifySink (EventNotify eventNotify) { _eventNotifyReference = new WeakReference (eventNotify); } void ISpNotifySink.Notify () { EventNotify eventNotify = (EventNotify) _eventNotifyReference.Target; if (eventNotify != null) { ThreadPool.QueueUserWorkItem (new WaitCallback (eventNotify.SendNotification)); } } private WeakReference _eventNotifyReference; } /// Dispatches events from ISpEventSource to DispatchEventDelegate on a thread /// compatible with the application model of the thread that created this object. internal class EventNotify { //******************************************************************* // // Constructors // //******************************************************************* #region Constructors internal EventNotify (ISpEventSource sapiEventSource, IAsyncDispatch dispatcher, bool additionalSapiFeatures) { // Remember event source _sapiEventSourceReference = new WeakReference (sapiEventSource); _dispatcher = dispatcher; _additionalSapiFeatures = additionalSapiFeatures; // Start listening to events from sapiEventSource. _notifySink = new SpNotifySink (this); sapiEventSource.SetNotifySink (_notifySink); } #endregion Constructors //******************************************************************** // // Internal Methods // //******************************************************************* #region Internal Methods // Finalizer is not required since ISpEventSource and AsyncOperation both implement appropriate finalizers. internal void Dispose () { lock (this) { // Since we are explicitly calling Dispose(), sapiEventSource (RCW) will normally be alive. // If Dispose() is called from a finalizer this may not be the case so check for null. if (_sapiEventSourceReference != null) { ISpEventSource sapiEventSource = (ISpEventSource) _sapiEventSourceReference.Target; if (sapiEventSource != null) { // Stop listening to events from sapiEventSource. sapiEventSource.SetNotifySink (null); _notifySink = null; } } _sapiEventSourceReference = null; } } internal void SendNotification (object ignored) { lock (this) { // Call dispatchEventDelegate for each SAPI event currently queued. if (_sapiEventSourceReference != null) { ISpEventSource sapiEventSource = (ISpEventSource) _sapiEventSourceReference.Target; if (sapiEventSource != null) { ListspeechEvents = new List (); SpeechEvent speechEvent; while (null != (speechEvent = SpeechEvent.TryCreateSpeechEvent (sapiEventSource, _additionalSapiFeatures, _audioFormat))) { speechEvents.Add (speechEvent); } _dispatcher.Post (speechEvents.ToArray ()); } } } } #endregion Methods //******************************************************************** // // Internal Properties // //******************************************************************** #region Internal Properties internal SpeechAudioFormatInfo AudioFormat { set { _audioFormat = value; } } #endregion Methods //******************************************************************* // // Private Methods // //******************************************************************** #region Private Methods #endregion //******************************************************************* // // Private Fields // //******************************************************************* #region Private Fields private IAsyncDispatch _dispatcher; private WeakReference _sapiEventSourceReference; private bool _additionalSapiFeatures; private SpeechAudioFormatInfo _audioFormat; private ISpNotifySink _notifySink; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PipelineModuleStepContainer.cs
- RegistryKey.cs
- ValidationErrorInfo.cs
- UnauthorizedAccessException.cs
- xdrvalidator.cs
- translator.cs
- UnhandledExceptionEventArgs.cs
- DbMetaDataCollectionNames.cs
- FormatSettings.cs
- XPathNodePointer.cs
- XmlFormatExtensionPointAttribute.cs
- safemediahandle.cs
- AuthenticationManager.cs
- SafeNativeMethodsMilCoreApi.cs
- InputLanguageEventArgs.cs
- StyleBamlTreeBuilder.cs
- CustomBindingElementCollection.cs
- ContentPosition.cs
- WindowInteractionStateTracker.cs
- XmlTextAttribute.cs
- UpdateCommandGenerator.cs
- UrlAuthorizationModule.cs
- WebEventTraceProvider.cs
- ResXResourceSet.cs
- SqlServer2KCompatibilityCheck.cs
- InstanceDataCollection.cs
- CatalogZoneAutoFormat.cs
- TemplatedMailWebEventProvider.cs
- UnsafeNativeMethods.cs
- RectangleConverter.cs
- PropagatorResult.cs
- OdbcParameterCollection.cs
- BrowserInteropHelper.cs
- ToolStripHighContrastRenderer.cs
- WmlCalendarAdapter.cs
- SmtpMail.cs
- MethodMessage.cs
- Empty.cs
- CroppedBitmap.cs
- InputScopeNameConverter.cs
- PasswordTextNavigator.cs
- WriteLineDesigner.xaml.cs
- ViewgenContext.cs
- FrameAutomationPeer.cs
- UpdatePanel.cs
- Slider.cs
- UriTemplateTable.cs
- SkinBuilder.cs
- HtmlInputPassword.cs
- TransformCryptoHandle.cs
- StylusCaptureWithinProperty.cs
- CodeCommentStatementCollection.cs
- DataTransferEventArgs.cs
- _SslState.cs
- PersonalizationProvider.cs
- MetaData.cs
- ContextMenuStripGroup.cs
- TemplateNodeContextMenu.cs
- XmlArrayItemAttribute.cs
- ServicesUtilities.cs
- DataGridViewBand.cs
- DrawToolTipEventArgs.cs
- ellipse.cs
- DataColumnChangeEvent.cs
- MetadataItemEmitter.cs
- SimpleBitVector32.cs
- KernelTypeValidation.cs
- ipaddressinformationcollection.cs
- UnsafeNativeMethodsCLR.cs
- StorageMappingItemCollection.cs
- HttpInputStream.cs
- EmptyEnumerable.cs
- _Rfc2616CacheValidators.cs
- ExceptionUtil.cs
- RoutingEndpointTrait.cs
- TemplateBindingExtensionConverter.cs
- DependencyObjectType.cs
- PreservationFileReader.cs
- DesignerCommandSet.cs
- AutoCompleteStringCollection.cs
- _WebProxyDataBuilder.cs
- GZipDecoder.cs
- UrlMappingCollection.cs
- FormViewCommandEventArgs.cs
- CorrelationExtension.cs
- DocumentOutline.cs
- LexicalChunk.cs
- BatchServiceHost.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- XPathException.cs
- GreaterThanOrEqual.cs
- SAPICategories.cs
- GeneralEndpointIdentity.cs
- ModelItemCollectionImpl.cs
- TypeSystemHelpers.cs
- Inflater.cs
- DesignerCalendarAdapter.cs
- InvokeGenerator.cs
- WsatAdminException.cs
- XmlMtomWriter.cs