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
- storepermissionattribute.cs
- ClonableStack.cs
- _UncName.cs
- SkinIDTypeConverter.cs
- ModelItemExtensions.cs
- Debug.cs
- CustomExpressionEventArgs.cs
- FramingFormat.cs
- CodeBinaryOperatorExpression.cs
- WebControl.cs
- TreeNodeCollection.cs
- Connection.cs
- URI.cs
- SharedPerformanceCounter.cs
- BrowserDefinition.cs
- Invariant.cs
- QilPatternVisitor.cs
- AtomServiceDocumentSerializer.cs
- CommandValueSerializer.cs
- PageThemeBuildProvider.cs
- CompilerScopeManager.cs
- QuadraticBezierSegment.cs
- SystemIcmpV4Statistics.cs
- XmlBindingWorker.cs
- ChangeTracker.cs
- MailAddressParser.cs
- ObjectSecurity.cs
- ServerProtocol.cs
- ConnectivityStatus.cs
- BooleanProjectedSlot.cs
- MediaElementAutomationPeer.cs
- MetadataItemCollectionFactory.cs
- PathTooLongException.cs
- UrlMappingsSection.cs
- GlyphManager.cs
- DefaultValueAttribute.cs
- BamlLocalizableResourceKey.cs
- SelectedGridItemChangedEvent.cs
- UserInitiatedNavigationPermission.cs
- WebPartVerbsEventArgs.cs
- WebPartChrome.cs
- BitmapDownload.cs
- BlockCollection.cs
- CalendarTable.cs
- BaseTemplateCodeDomTreeGenerator.cs
- TagMapInfo.cs
- Propagator.ExtentPlaceholderCreator.cs
- FileFormatException.cs
- CopyCodeAction.cs
- FormViewUpdateEventArgs.cs
- InfoCardService.cs
- RequestCacheEntry.cs
- DataKey.cs
- CorrelationTokenTypeConvertor.cs
- DynamicDataResources.Designer.cs
- AndCondition.cs
- TemplateXamlTreeBuilder.cs
- OutputCacheSection.cs
- XmlLangPropertyAttribute.cs
- TextTreeObjectNode.cs
- MsmqHostedTransportManager.cs
- SyncMethodInvoker.cs
- ReliabilityContractAttribute.cs
- DataSourceProvider.cs
- XPathItem.cs
- Fonts.cs
- TableSectionStyle.cs
- ZipIOBlockManager.cs
- TcpClientChannel.cs
- ButtonBase.cs
- ObjectDataSourceEventArgs.cs
- EventItfInfo.cs
- PrintPreviewDialog.cs
- Rectangle.cs
- LoginCancelEventArgs.cs
- WizardPanelChangingEventArgs.cs
- HwndStylusInputProvider.cs
- _AutoWebProxyScriptHelper.cs
- EncryptedKeyIdentifierClause.cs
- SafeProcessHandle.cs
- TrackingProfile.cs
- MemoryMappedFile.cs
- DescendantBaseQuery.cs
- RowParagraph.cs
- BehaviorEditorPart.cs
- XmlLangPropertyAttribute.cs
- DefaultMemberAttribute.cs
- InternalRelationshipCollection.cs
- BuildProvidersCompiler.cs
- IPEndPointCollection.cs
- MetadataArtifactLoaderCompositeResource.cs
- MemberInfoSerializationHolder.cs
- LoopExpression.cs
- Pair.cs
- AuthenticationSection.cs
- GridItemCollection.cs
- HijriCalendar.cs
- LineVisual.cs
- RelationshipEndCollection.cs
- OperationAbortedException.cs