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
- ImageConverter.cs
- DispatcherProcessingDisabled.cs
- HMACSHA1.cs
- OdbcConnectionOpen.cs
- ToolStripItemTextRenderEventArgs.cs
- PermissionSet.cs
- HttpStreamMessage.cs
- DataGridViewTextBoxColumn.cs
- BufferedWebEventProvider.cs
- Calendar.cs
- DeviceContext.cs
- FixedPosition.cs
- ListViewContainer.cs
- PrinterResolution.cs
- Assembly.cs
- ZoneMembershipCondition.cs
- CompilerCollection.cs
- GCHandleCookieTable.cs
- DocumentGridPage.cs
- AlphaSortedEnumConverter.cs
- DeliveryRequirementsAttribute.cs
- ListInitExpression.cs
- TransformerConfigurationWizardBase.cs
- ThreadStartException.cs
- SecurityState.cs
- FlowDocumentPaginator.cs
- ProxyManager.cs
- SafeNativeMethodsOther.cs
- DataGridPagerStyle.cs
- InputScope.cs
- TextRangeEdit.cs
- GlobalItem.cs
- Slider.cs
- SamlAuthorizationDecisionStatement.cs
- PathFigureCollection.cs
- ChtmlMobileTextWriter.cs
- OperationFormatter.cs
- ManifestBasedResourceGroveler.cs
- PropertyItemInternal.cs
- HwndStylusInputProvider.cs
- cache.cs
- IPEndPoint.cs
- AttributeCollection.cs
- KoreanCalendar.cs
- InputLangChangeRequestEvent.cs
- DataSourceCollectionBase.cs
- DeferredTextReference.cs
- FlowchartDesigner.xaml.cs
- Model3D.cs
- SynchronizedPool.cs
- Imaging.cs
- SynchronizingStream.cs
- WindowsToolbarAsMenu.cs
- ToolStripDesignerUtils.cs
- MediaPlayer.cs
- RectKeyFrameCollection.cs
- WebPartConnectionsCloseVerb.cs
- TrustLevelCollection.cs
- PeerDuplexChannel.cs
- EditorZoneDesigner.cs
- FontStretchConverter.cs
- RightsManagementEncryptedStream.cs
- XmlAutoDetectWriter.cs
- Missing.cs
- FileChangesMonitor.cs
- UnionQueryOperator.cs
- IdentifierService.cs
- WeakEventManager.cs
- ObjectItemNoOpAssemblyLoader.cs
- XmlnsPrefixAttribute.cs
- StatusBarAutomationPeer.cs
- EmulateRecognizeCompletedEventArgs.cs
- SpecialNameAttribute.cs
- HtmlUtf8RawTextWriter.cs
- GenericWebPart.cs
- HtmlHistory.cs
- SelectionWordBreaker.cs
- dataprotectionpermissionattribute.cs
- XhtmlConformanceSection.cs
- ListViewDesigner.cs
- FontNamesConverter.cs
- WpfWebRequestHelper.cs
- GridLengthConverter.cs
- TargetConverter.cs
- StrongName.cs
- URLString.cs
- Baml2006ReaderContext.cs
- CodeStatementCollection.cs
- PageFunction.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- CodeDirectiveCollection.cs
- BoolExpr.cs
- XmlNodeWriter.cs
- OpenTypeLayoutCache.cs
- SecurityTokenAuthenticator.cs
- ReachUIElementCollectionSerializer.cs
- CompilationSection.cs
- SharedMemory.cs
- ComPlusTypeLoader.cs
- SoundPlayer.cs