Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / 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
- XmlReaderDelegator.cs
- XmlFormatWriterGenerator.cs
- XmlSchemaAttributeGroupRef.cs
- mactripleDES.cs
- Win32.cs
- Screen.cs
- SqlDataSourceQueryConverter.cs
- XmlNavigatorFilter.cs
- CopyNamespacesAction.cs
- SystemResources.cs
- TaskFormBase.cs
- RelationshipDetailsCollection.cs
- Assembly.cs
- CodeGeneratorOptions.cs
- RelationshipEndMember.cs
- LiteralControl.cs
- HtmlInputHidden.cs
- OracleEncoding.cs
- StringDictionary.cs
- XmlDomTextWriter.cs
- TextEffectCollection.cs
- AgileSafeNativeMemoryHandle.cs
- WindowsTab.cs
- TextParentUndoUnit.cs
- PageWrapper.cs
- OleDbPermission.cs
- HeaderLabel.cs
- ClientReliableChannelBinder.cs
- WindowsListViewScroll.cs
- BackgroundWorker.cs
- DoubleLinkListEnumerator.cs
- SetIndexBinder.cs
- MeshGeometry3D.cs
- DetailsViewRowCollection.cs
- StringFunctions.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ObjectStateManager.cs
- SQLBytesStorage.cs
- ForceCopyBuildProvider.cs
- BufferBuilder.cs
- XmlSchemaSimpleTypeRestriction.cs
- Int16KeyFrameCollection.cs
- XmlSerializerFactory.cs
- ReadOnlyCollection.cs
- RootBuilder.cs
- UntrustedRecipientException.cs
- GridViewDeletedEventArgs.cs
- HttpCapabilitiesSectionHandler.cs
- StickyNoteContentControl.cs
- WebPartConnectionsEventArgs.cs
- BitVector32.cs
- DataGridViewColumnCollectionEditor.cs
- CharacterMetricsDictionary.cs
- BinaryEditor.cs
- Substitution.cs
- LZCodec.cs
- FaultContractInfo.cs
- ellipse.cs
- ValidationError.cs
- SwitchAttribute.cs
- PeerResolverElement.cs
- SmiEventStream.cs
- DriveInfo.cs
- SimpleHandlerFactory.cs
- CachingHintValidation.cs
- MenuRenderer.cs
- DataControlFieldCell.cs
- Zone.cs
- RowType.cs
- sortedlist.cs
- ErasingStroke.cs
- AmbientLight.cs
- ErrorWrapper.cs
- URI.cs
- EventLogEntryCollection.cs
- ListViewItemSelectionChangedEvent.cs
- CommandBinding.cs
- assemblycache.cs
- WindowsIPAddress.cs
- ObjectContextServiceProvider.cs
- MailMessageEventArgs.cs
- DataSourceXmlTextReader.cs
- XmlLanguage.cs
- ExtensionDataReader.cs
- ObjectDataSourceEventArgs.cs
- RuntimeConfigurationRecord.cs
- IndependentlyAnimatedPropertyMetadata.cs
- ImageAttributes.cs
- KnownAssembliesSet.cs
- DataGridViewCellEventArgs.cs
- TransactionException.cs
- Stylus.cs
- PixelShader.cs
- SimpleRecyclingCache.cs
- WebZoneDesigner.cs
- PropertyState.cs
- WebPartZoneAutoFormat.cs
- QilBinary.cs
- PauseStoryboard.cs
- FormParameter.cs