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
- SafeArrayRankMismatchException.cs
- DesignerCategoryAttribute.cs
- QEncodedStream.cs
- DocumentViewerAutomationPeer.cs
- SimpleTableProvider.cs
- OptimizerPatterns.cs
- HostingEnvironment.cs
- HeaderedContentControl.cs
- PathSegmentCollection.cs
- AutoResetEvent.cs
- VisualStyleRenderer.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- SelectionListDesigner.cs
- CustomErrorCollection.cs
- DateTimeStorage.cs
- Stream.cs
- TokenFactoryCredential.cs
- EditorPartCollection.cs
- TemplateComponentConnector.cs
- Win32Native.cs
- PowerEase.cs
- PlatformNotSupportedException.cs
- ListBoxItemAutomationPeer.cs
- Calendar.cs
- HostingMessageProperty.cs
- ConfigurationProviderException.cs
- ConnectionManagementElementCollection.cs
- FileRecordSequence.cs
- SafeNativeMethods.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- QilUnary.cs
- ToolStripPanelRenderEventArgs.cs
- EventPrivateKey.cs
- Rotation3DAnimationBase.cs
- WebServiceClientProxyGenerator.cs
- DataColumnCollection.cs
- SqlClientPermission.cs
- CursorConverter.cs
- MenuCommand.cs
- SqlPersonalizationProvider.cs
- AsyncOperationManager.cs
- ChildChangedEventArgs.cs
- SourceFileInfo.cs
- SocketAddress.cs
- RequestContext.cs
- FrameworkContentElement.cs
- QueryCursorEventArgs.cs
- MessageBuilder.cs
- SortedList.cs
- CurrentChangingEventArgs.cs
- SamlConstants.cs
- HttpHeaderCollection.cs
- ColorInterpolationModeValidation.cs
- FixedDocumentPaginator.cs
- StoreItemCollection.Loader.cs
- StrongNamePublicKeyBlob.cs
- EntityDataSourceWrapperCollection.cs
- LayoutInformation.cs
- Keywords.cs
- ChtmlMobileTextWriter.cs
- FamilyMapCollection.cs
- AtomServiceDocumentSerializer.cs
- TogglePattern.cs
- DocumentPageHost.cs
- ArraySet.cs
- AstNode.cs
- XmlSchemaSimpleType.cs
- ProtocolImporter.cs
- VerticalAlignConverter.cs
- WebPartConnectionsCloseVerb.cs
- BamlLocalizableResourceKey.cs
- PointAnimationUsingKeyFrames.cs
- Application.cs
- SubpageParagraph.cs
- SqlFormatter.cs
- SafeBuffer.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- MaskedTextProvider.cs
- TextDataBindingHandler.cs
- AtomicFile.cs
- Pair.cs
- EditorZoneBase.cs
- QuadraticBezierSegment.cs
- SymbolPair.cs
- QuotedPrintableStream.cs
- PartManifestEntry.cs
- SimpleType.cs
- StrokeDescriptor.cs
- NetSectionGroup.cs
- Point3DAnimationBase.cs
- ObjectDataSourceDisposingEventArgs.cs
- MatrixValueSerializer.cs
- DataControlFieldHeaderCell.cs
- AddDataControlFieldDialog.cs
- FocusWithinProperty.cs
- SelectionRange.cs
- WebServiceHost.cs
- DataServiceResponse.cs
- Geometry.cs
- WebDisplayNameAttribute.cs