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
- DSGeneratorProblem.cs
- _NetworkingPerfCounters.cs
- WSHttpBindingBaseElement.cs
- WebPartDisplayModeEventArgs.cs
- ConfigUtil.cs
- _SslStream.cs
- StringBlob.cs
- WindowsIPAddress.cs
- DataSourceConverter.cs
- NodeCounter.cs
- TextEffectCollection.cs
- oledbconnectionstring.cs
- ErrorHandlerModule.cs
- SourceFileInfo.cs
- StrokeCollectionConverter.cs
- WebConfigurationManager.cs
- ErrorWebPart.cs
- SpecularMaterial.cs
- DESCryptoServiceProvider.cs
- DocumentGridContextMenu.cs
- BitmapScalingModeValidation.cs
- PackagePartCollection.cs
- XmlBinaryWriterSession.cs
- IdleTimeoutMonitor.cs
- PageWrapper.cs
- QilCloneVisitor.cs
- SqlDataSourceFilteringEventArgs.cs
- Base64Encoder.cs
- FormatterServices.cs
- SingleAnimationBase.cs
- ListView.cs
- BadImageFormatException.cs
- StorageEntityTypeMapping.cs
- ScalarOps.cs
- Style.cs
- RichTextBoxConstants.cs
- Filter.cs
- OledbConnectionStringbuilder.cs
- FamilyMap.cs
- RandomNumberGenerator.cs
- QueryStringHandler.cs
- FormsAuthenticationModule.cs
- TypeSystem.cs
- CompareInfo.cs
- CancellationTokenSource.cs
- XsltArgumentList.cs
- TraceFilter.cs
- XamlGridLengthSerializer.cs
- XmlReaderDelegator.cs
- TextChange.cs
- StringExpressionSet.cs
- HorizontalAlignConverter.cs
- ArraySet.cs
- ColorAnimation.cs
- PerfCounters.cs
- ScriptRegistrationManager.cs
- CreateUserWizardAutoFormat.cs
- TreeNodeEventArgs.cs
- Visual3D.cs
- EntityProviderFactory.cs
- DataGridViewRowCollection.cs
- VariableQuery.cs
- SoapIgnoreAttribute.cs
- PrintEvent.cs
- NullableBoolConverter.cs
- SoapHeaders.cs
- Timeline.cs
- CoTaskMemHandle.cs
- XmlDataSourceDesigner.cs
- ReadWriteSpinLock.cs
- ListViewTableCell.cs
- DocumentApplicationJournalEntry.cs
- SetterBaseCollection.cs
- PathFigureCollection.cs
- FontSourceCollection.cs
- SqlDataRecord.cs
- SortExpressionBuilder.cs
- ConfigurationPermission.cs
- SQLInt16Storage.cs
- VisualCollection.cs
- IntSecurity.cs
- DataViewListener.cs
- ProfileElement.cs
- QuaternionAnimation.cs
- OperandQuery.cs
- MatrixKeyFrameCollection.cs
- DataGridViewControlCollection.cs
- GenericTypeParameterBuilder.cs
- TrackingConditionCollection.cs
- PageRanges.cs
- ZipIOExtraFieldZip64Element.cs
- NameSpaceExtractor.cs
- DbConnectionPoolCounters.cs
- Int16AnimationUsingKeyFrames.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- CryptoHandle.cs
- BaseHashHelper.cs
- AssociationSetEnd.cs
- ReaderWriterLockWrapper.cs
- DecoderBestFitFallback.cs