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
- mediaeventargs.cs
- XamlFilter.cs
- DataGridViewColumn.cs
- UnrecognizedAssertionsBindingElement.cs
- DataServiceQuery.cs
- SplitterEvent.cs
- NumericUpDown.cs
- SystemThemeKey.cs
- DataTrigger.cs
- ColumnTypeConverter.cs
- X509ChainPolicy.cs
- _NegoStream.cs
- GridViewUpdateEventArgs.cs
- CustomError.cs
- QilTernary.cs
- MembershipValidatePasswordEventArgs.cs
- compensatingcollection.cs
- ToolStripItemTextRenderEventArgs.cs
- DocumentXmlWriter.cs
- cache.cs
- ThemeInfoAttribute.cs
- SqlCommand.cs
- LogRecordSequence.cs
- HttpSysSettings.cs
- FormatException.cs
- BaseCollection.cs
- exports.cs
- StringAnimationBase.cs
- SqlAggregateChecker.cs
- PropertyEmitter.cs
- MemoryResponseElement.cs
- ConfigXmlAttribute.cs
- Attribute.cs
- TemplateParser.cs
- ConstNode.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- ExceptQueryOperator.cs
- ContentPlaceHolder.cs
- ProjectedWrapper.cs
- ViewSimplifier.cs
- Expressions.cs
- UserControlParser.cs
- WS2007HttpBinding.cs
- TextFragmentEngine.cs
- BitmapEncoder.cs
- Point3D.cs
- ButtonBase.cs
- CannotUnloadAppDomainException.cs
- smtpconnection.cs
- DataTableNameHandler.cs
- PrivilegedConfigurationManager.cs
- PrimitiveSchema.cs
- FileDialogPermission.cs
- DisplayClaim.cs
- StdValidatorsAndConverters.cs
- NumericPagerField.cs
- SolidColorBrush.cs
- OutputScopeManager.cs
- WindowsPen.cs
- WindowsGrip.cs
- DataGridViewAutoSizeModeEventArgs.cs
- CommandEventArgs.cs
- SqlErrorCollection.cs
- GenericArgumentsUpdater.cs
- SerializationEventsCache.cs
- WebPartTransformerCollection.cs
- AccessDataSourceWizardForm.cs
- SocketPermission.cs
- FocusWithinProperty.cs
- BinaryMethodMessage.cs
- DataControlFieldsEditor.cs
- SpanIndex.cs
- securitycriticaldataClass.cs
- XmlSerializer.cs
- Line.cs
- AnnotationResourceChangedEventArgs.cs
- TreeChangeInfo.cs
- EditorAttribute.cs
- MultiplexingDispatchMessageFormatter.cs
- EntityClientCacheEntry.cs
- ExtendLockCommand.cs
- SizeAnimationBase.cs
- TemplateBindingExpression.cs
- EntityConnectionStringBuilder.cs
- lengthconverter.cs
- GACMembershipCondition.cs
- TextBlockAutomationPeer.cs
- TreeChangeInfo.cs
- WebPart.cs
- SpellerInterop.cs
- GroupByQueryOperator.cs
- Header.cs
- Exceptions.cs
- TextServicesContext.cs
- IIS7UserPrincipal.cs
- XmlCharCheckingWriter.cs
- ObjectHandle.cs
- FormViewInsertedEventArgs.cs
- ErrorFormatter.cs
- PathSegmentCollection.cs