Code:
/ DotNET / DotNET / 8.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HtmlElementCollection.cs
- HttpHandlersSection.cs
- Assert.cs
- ListComponentEditorPage.cs
- DataGridAutoFormatDialog.cs
- ListSortDescriptionCollection.cs
- HtmlButton.cs
- SafeRightsManagementHandle.cs
- SiteMapNodeItem.cs
- PerfCounterSection.cs
- FrameworkElement.cs
- GeneralTransform3DGroup.cs
- InstanceOwner.cs
- IDQuery.cs
- FunctionMappingTranslator.cs
- FastEncoder.cs
- XmlUrlResolver.cs
- ContentValidator.cs
- FixedElement.cs
- EdmFunction.cs
- DirectoryObjectSecurity.cs
- GeometryHitTestParameters.cs
- DefaultPrintController.cs
- ConditionCollection.cs
- ComPlusServiceLoader.cs
- CustomAttributeBuilder.cs
- HandleTable.cs
- oledbmetadatacollectionnames.cs
- DataStreamFromComStream.cs
- GeneralTransform3D.cs
- BevelBitmapEffect.cs
- XDRSchema.cs
- AdRotator.cs
- GenericNameHandler.cs
- MediaPlayer.cs
- DoubleSumAggregationOperator.cs
- Inline.cs
- ReadOnlyDictionary.cs
- mda.cs
- PenThreadWorker.cs
- Evidence.cs
- PenCursorManager.cs
- AssertUtility.cs
- EdmEntityTypeAttribute.cs
- BitmapMetadataEnumerator.cs
- PageCache.cs
- ListBox.cs
- ComponentChangingEvent.cs
- AssemblyFilter.cs
- DesignerActionGlyph.cs
- GridViewColumnHeaderAutomationPeer.cs
- TaskFileService.cs
- ValueSerializer.cs
- ScopeCollection.cs
- TextTrailingWordEllipsis.cs
- X509UI.cs
- OptionUsage.cs
- EventLogInternal.cs
- Function.cs
- DataChangedEventManager.cs
- XmlTypeAttribute.cs
- PageRanges.cs
- RepeaterCommandEventArgs.cs
- MultidimensionalArrayItemReference.cs
- MediaCommands.cs
- DrawingCollection.cs
- BuildProvider.cs
- ConfigXmlAttribute.cs
- UrlMappingsSection.cs
- HandleCollector.cs
- UpdateTracker.cs
- _SingleItemRequestCache.cs
- ExceptionHandlerDesigner.cs
- DynamicFilterExpression.cs
- Rotation3DAnimationBase.cs
- GB18030Encoding.cs
- ProtocolsConfigurationHandler.cs
- RuntimeConfigurationRecord.cs
- InputBinder.cs
- HtmlGenericControl.cs
- DataGridLinkButton.cs
- LocatorPart.cs
- HttpCachePolicyElement.cs
- RequiredFieldValidator.cs
- SafeNativeMethodsMilCoreApi.cs
- GridItemProviderWrapper.cs
- AssemblyAttributesGoHere.cs
- TraceXPathNavigator.cs
- TableRowCollection.cs
- DataBindingsDialog.cs
- ExpandCollapseIsCheckedConverter.cs
- TableRowGroupCollection.cs
- Image.cs
- HashCodeCombiner.cs
- EditorOptionAttribute.cs
- StreamGeometry.cs
- SecureConversationServiceCredential.cs
- NonParentingControl.cs
- XmlRawWriterWrapper.cs
- TextSyndicationContentKindHelper.cs