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
- NotSupportedException.cs
- ZipIOModeEnforcingStream.cs
- CommandValueSerializer.cs
- TableLayoutStyleCollection.cs
- ListViewContainer.cs
- ChildrenQuery.cs
- _OSSOCK.cs
- FormClosingEvent.cs
- Nullable.cs
- UseAttributeSetsAction.cs
- ComponentEditorPage.cs
- RuleSetReference.cs
- DescriptionAttribute.cs
- CommonObjectSecurity.cs
- Error.cs
- CompositeScriptReferenceEventArgs.cs
- RegexWorker.cs
- Pts.cs
- CompilerTypeWithParams.cs
- EventProviderWriter.cs
- DeferredSelectedIndexReference.cs
- XmlReflectionMember.cs
- CheckBoxField.cs
- SaveFileDialog.cs
- InternalBufferOverflowException.cs
- RelationshipEndMember.cs
- XmlSchemaAttributeGroup.cs
- WebZone.cs
- Base64Encoder.cs
- SystemTcpConnection.cs
- Version.cs
- WindowsAuthenticationEventArgs.cs
- UnsafeNativeMethodsPenimc.cs
- TimelineGroup.cs
- PageRequestManager.cs
- DoubleCollection.cs
- StylusTip.cs
- sqlmetadatafactory.cs
- DataSourceProvider.cs
- SchemaImporterExtensionElement.cs
- EntityDataSourceSelectedEventArgs.cs
- AccessDataSourceView.cs
- Decimal.cs
- HtmlInputControl.cs
- PositiveTimeSpanValidator.cs
- IntegrationExceptionEventArgs.cs
- CommandDevice.cs
- PerformanceCountersBase.cs
- DelegatedStream.cs
- TemplateBamlRecordReader.cs
- ContentTextAutomationPeer.cs
- basenumberconverter.cs
- TdsParameterSetter.cs
- OpCodes.cs
- ProviderUtil.cs
- ClientScriptManager.cs
- Matrix.cs
- ClientScriptManagerWrapper.cs
- SafeMarshalContext.cs
- SerialErrors.cs
- CacheDict.cs
- ImageMapEventArgs.cs
- Label.cs
- DispatcherTimer.cs
- TypeToStringValueConverter.cs
- DispatcherSynchronizationContext.cs
- SafeProcessHandle.cs
- FontStyles.cs
- QueryResponse.cs
- StateFinalizationActivity.cs
- MenuItem.cs
- ExtensibleClassFactory.cs
- DESCryptoServiceProvider.cs
- SponsorHelper.cs
- GenericQueueSurrogate.cs
- Win32SafeHandles.cs
- ServiceContractDetailViewControl.cs
- SR.cs
- Util.cs
- SQLInt16Storage.cs
- EventTrigger.cs
- SQLStringStorage.cs
- PageFunction.cs
- ZoomingMessageFilter.cs
- CatalogPartCollection.cs
- X509Certificate.cs
- FrameSecurityDescriptor.cs
- ImageEditor.cs
- HttpsChannelFactory.cs
- ContourSegment.cs
- XamlSerializationHelper.cs
- SqlDataAdapter.cs
- UnsafeNativeMethods.cs
- PropertyGridView.cs
- AssemblyHash.cs
- SelectorAutomationPeer.cs
- PersonalizationEntry.cs
- ExtenderProvidedPropertyAttribute.cs
- MarginsConverter.cs
- XslNumber.cs