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
- DataGridSortCommandEventArgs.cs
- QilValidationVisitor.cs
- validation.cs
- QuaternionAnimation.cs
- CharConverter.cs
- SplitterCancelEvent.cs
- WmpBitmapDecoder.cs
- ResourceKey.cs
- VectorAnimation.cs
- FunctionNode.cs
- SectionXmlInfo.cs
- ResourceExpression.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- DurableMessageDispatchInspector.cs
- EdmMember.cs
- WebPartConnectionsCancelVerb.cs
- DoubleLinkListEnumerator.cs
- DecimalAnimationBase.cs
- TextFormatterHost.cs
- DataGridRowDetailsEventArgs.cs
- ThemeableAttribute.cs
- DelegatedStream.cs
- ImageListUtils.cs
- NotifyParentPropertyAttribute.cs
- InternalDispatchObject.cs
- JsonCollectionDataContract.cs
- XmlNodeChangedEventManager.cs
- CommentEmitter.cs
- Button.cs
- InlineCollection.cs
- TCPClient.cs
- QilLoop.cs
- Panel.cs
- SectionUpdates.cs
- CodeAttributeDeclaration.cs
- BooleanConverter.cs
- CompilerCollection.cs
- DisplayMemberTemplateSelector.cs
- TreeIterators.cs
- mediapermission.cs
- EntitySetDataBindingList.cs
- Attributes.cs
- XamlSerializerUtil.cs
- PrinterUnitConvert.cs
- DrawingContextDrawingContextWalker.cs
- CultureInfoConverter.cs
- ReadContentAsBinaryHelper.cs
- StylusDevice.cs
- ReachBasicContext.cs
- VirtualizingStackPanel.cs
- XmlSchemaAnnotation.cs
- Calendar.cs
- DockEditor.cs
- DriveInfo.cs
- _Rfc2616CacheValidators.cs
- CultureInfoConverter.cs
- XmlSchemaCompilationSettings.cs
- ApplicationServiceManager.cs
- Span.cs
- basenumberconverter.cs
- HostProtectionException.cs
- Point3D.cs
- HttpCapabilitiesBase.cs
- HighlightVisual.cs
- AxHost.cs
- UpdateException.cs
- ISFTagAndGuidCache.cs
- ObjectStorage.cs
- QueryCacheManager.cs
- UpdatePanel.cs
- MimeParameters.cs
- TdsParserSessionPool.cs
- TableCellCollection.cs
- ConvertersCollection.cs
- SqlXmlStorage.cs
- InternalTransaction.cs
- NamespaceCollection.cs
- Exceptions.cs
- ParallelDesigner.cs
- ObjectAnimationUsingKeyFrames.cs
- ColorPalette.cs
- DocumentSchemaValidator.cs
- TcpConnectionPoolSettings.cs
- ComplexType.cs
- QilGenerator.cs
- EntityRecordInfo.cs
- CustomValidator.cs
- XPathDocumentNavigator.cs
- Trustee.cs
- DataGridViewImageCell.cs
- HtmlWindow.cs
- CompressionTransform.cs
- XmlSerializationWriter.cs
- UTF32Encoding.cs
- DataServiceRequestOfT.cs
- IndentedWriter.cs
- WebPartsPersonalizationAuthorization.cs
- SamlAuthenticationStatement.cs
- UpDownBase.cs
- LocationSectionRecord.cs