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
- FormsAuthenticationUserCollection.cs
- FilteredXmlReader.cs
- CellCreator.cs
- DataGridViewRowsAddedEventArgs.cs
- FormViewModeEventArgs.cs
- TraceListener.cs
- TableCell.cs
- ToolboxItem.cs
- ClassImporter.cs
- ValidationErrorCollection.cs
- CommonObjectSecurity.cs
- HGlobalSafeHandle.cs
- ListViewCommandEventArgs.cs
- Attributes.cs
- BaseTemplateBuildProvider.cs
- BitHelper.cs
- StickyNoteContentControl.cs
- TextEndOfLine.cs
- WindowsRichEditRange.cs
- SynchronizationLockException.cs
- WebBrowserSiteBase.cs
- UrlPath.cs
- WindowsAuthenticationEventArgs.cs
- ProfileElement.cs
- DataSysAttribute.cs
- BigIntegerStorage.cs
- QueryCursorEventArgs.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- CorrelationTokenInvalidatedHandler.cs
- SessionPageStatePersister.cs
- DSASignatureDeformatter.cs
- FirstMatchCodeGroup.cs
- AutomationFocusChangedEventArgs.cs
- FileUtil.cs
- Converter.cs
- SinglePageViewer.cs
- XmlArrayItemAttribute.cs
- Point3DKeyFrameCollection.cs
- DBSchemaTable.cs
- WebPartExportVerb.cs
- NotifyInputEventArgs.cs
- ObjectDataSourceEventArgs.cs
- NotifyParentPropertyAttribute.cs
- XmlReaderSettings.cs
- RegexTypeEditor.cs
- RegistryKey.cs
- HitTestWithGeometryDrawingContextWalker.cs
- ReaderWriterLock.cs
- SpeakProgressEventArgs.cs
- StackBuilderSink.cs
- BaseDataBoundControl.cs
- VisualTreeUtils.cs
- SecurityResources.cs
- SystemIPAddressInformation.cs
- RequestQueryParser.cs
- DataGridViewColumnConverter.cs
- Int32.cs
- HelpFileFileNameEditor.cs
- PeerInputChannel.cs
- DesignerWebPartChrome.cs
- ImageKeyConverter.cs
- Queue.cs
- TouchPoint.cs
- WebUtil.cs
- MimeWriter.cs
- TypeUtil.cs
- DelimitedListTraceListener.cs
- ClientCultureInfo.cs
- BmpBitmapDecoder.cs
- PackageRelationship.cs
- HttpModuleAction.cs
- NameScope.cs
- SQLMoneyStorage.cs
- MemberDescriptor.cs
- ListenDesigner.cs
- FontUnitConverter.cs
- LicenseException.cs
- BamlCollectionHolder.cs
- AsyncStreamReader.cs
- SimpleMailWebEventProvider.cs
- IdnElement.cs
- MessageDesigner.cs
- Column.cs
- MobileControlDesigner.cs
- HTMLTextWriter.cs
- LogLogRecordHeader.cs
- ApplicationDirectory.cs
- WebPartConnectionsConfigureVerb.cs
- TrimSurroundingWhitespaceAttribute.cs
- PopupRootAutomationPeer.cs
- WorkflowMarkupElementEventArgs.cs
- GlobalizationAssembly.cs
- EditorZoneBase.cs
- BlockUIContainer.cs
- ExecutedRoutedEventArgs.cs
- KeyPullup.cs
- ToolStripSeparatorRenderEventArgs.cs
- HtmlControl.cs
- PeerObject.cs
- OleServicesContext.cs