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
- unsafeIndexingFilterStream.cs
- MenuItemStyle.cs
- MailWebEventProvider.cs
- TextEffectCollection.cs
- HttpWebResponse.cs
- OleDbException.cs
- EntitySetBase.cs
- DropShadowEffect.cs
- DiagnosticSection.cs
- ListViewGroupItemCollection.cs
- JapaneseLunisolarCalendar.cs
- BamlRecordWriter.cs
- BindingOperations.cs
- PlacementWorkspace.cs
- Compiler.cs
- SerializationTrace.cs
- TrackingMemoryStream.cs
- RectConverter.cs
- ToolboxItemFilterAttribute.cs
- SoapException.cs
- EntityDescriptor.cs
- CqlErrorHelper.cs
- RealProxy.cs
- ListParaClient.cs
- XsdDuration.cs
- ToolStripSplitStackLayout.cs
- HtmlImage.cs
- UserControl.cs
- SymDocumentType.cs
- LayoutTable.cs
- SmtpNegotiateAuthenticationModule.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- ResolveNameEventArgs.cs
- MouseWheelEventArgs.cs
- TypeSemantics.cs
- SqlUserDefinedTypeAttribute.cs
- ReachObjectContext.cs
- ConstantSlot.cs
- HelpPage.cs
- _AutoWebProxyScriptWrapper.cs
- MenuCommand.cs
- ImageDrawing.cs
- RuleValidation.cs
- OleDbPermission.cs
- SessionStateSection.cs
- ConnectionManagementElement.cs
- DbConnectionPoolGroup.cs
- DrawTreeNodeEventArgs.cs
- TextEditorSpelling.cs
- XmlTextReader.cs
- TrackingStringDictionary.cs
- ModelItemImpl.cs
- PlatformNotSupportedException.cs
- EntityDesignerDataSourceView.cs
- Script.cs
- RowCache.cs
- AppDomain.cs
- DesignerVerbCollection.cs
- ContainerUtilities.cs
- QilTypeChecker.cs
- Rectangle.cs
- MdImport.cs
- CorruptingExceptionCommon.cs
- SlipBehavior.cs
- SchemaExporter.cs
- InvalidDataException.cs
- XmlSerializationReader.cs
- CommandField.cs
- TextEditorLists.cs
- HttpCapabilitiesSectionHandler.cs
- ToolStripItemCollection.cs
- PnrpPeerResolverBindingElement.cs
- SerTrace.cs
- PerformanceCountersElement.cs
- MsdtcClusterUtils.cs
- OdbcConnectionPoolProviderInfo.cs
- TemplateControlCodeDomTreeGenerator.cs
- JpegBitmapEncoder.cs
- CodeNamespaceImport.cs
- StatusBarDrawItemEvent.cs
- Attributes.cs
- ReadOnlyPropertyMetadata.cs
- CustomErrorsSection.cs
- ParallelEnumerableWrapper.cs
- SubpageParaClient.cs
- Stackframe.cs
- XmlIlTypeHelper.cs
- ResourceExpression.cs
- ThrowHelper.cs
- BeginEvent.cs
- InputProcessorProfilesLoader.cs
- _OverlappedAsyncResult.cs
- _NtlmClient.cs
- Psha1DerivedKeyGenerator.cs
- OraclePermission.cs
- HwndSubclass.cs
- UmAlQuraCalendar.cs
- Validator.cs
- CodeTypeConstructor.cs
- PerformanceCounterCategory.cs