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
- ThreadStartException.cs
- StaticContext.cs
- FileSystemEventArgs.cs
- HtmlInputText.cs
- DefaultPrintController.cs
- WebPartDisplayModeCancelEventArgs.cs
- TypefaceCollection.cs
- RowsCopiedEventArgs.cs
- ListViewItem.cs
- UnionCqlBlock.cs
- Type.cs
- TextBox.cs
- WebPartMenuStyle.cs
- CustomActivityDesigner.cs
- MailMessageEventArgs.cs
- Buffer.cs
- CompositeControlDesigner.cs
- ParserHooks.cs
- DataTableMapping.cs
- DataGridTableCollection.cs
- ParserOptions.cs
- XmlElementList.cs
- PointAnimationBase.cs
- PictureBoxDesigner.cs
- LinkUtilities.cs
- ClientUrlResolverWrapper.cs
- basecomparevalidator.cs
- ServiceOperationInvoker.cs
- PointLight.cs
- NoneExcludedImageIndexConverter.cs
- HelpKeywordAttribute.cs
- DelegatingTypeDescriptionProvider.cs
- ModelChangedEventArgsImpl.cs
- DoubleLinkList.cs
- UserNameSecurityTokenProvider.cs
- _DomainName.cs
- ContractUtils.cs
- ZipIOLocalFileBlock.cs
- XmlAggregates.cs
- TextCompositionEventArgs.cs
- TransactionScope.cs
- ActivityWithResult.cs
- VersionedStream.cs
- StrokeIntersection.cs
- SecondaryViewProvider.cs
- Help.cs
- MessageQueuePermissionEntry.cs
- DbDataSourceEnumerator.cs
- BaseTemplateParser.cs
- CultureSpecificStringDictionary.cs
- SelectedDatesCollection.cs
- IndexingContentUnit.cs
- PrePrepareMethodAttribute.cs
- ImportFileRequest.cs
- FamilyCollection.cs
- ConfigXmlText.cs
- InkCanvasAutomationPeer.cs
- WinEventWrap.cs
- BookmarkScopeInfo.cs
- DetailsViewCommandEventArgs.cs
- EdmConstants.cs
- HTTPNotFoundHandler.cs
- QuaternionKeyFrameCollection.cs
- FileUtil.cs
- xamlnodes.cs
- DataList.cs
- shaperfactoryquerycacheentry.cs
- Permission.cs
- StateDesignerConnector.cs
- EdmType.cs
- ReflectionPermission.cs
- UseLicense.cs
- Thread.cs
- CollectionBase.cs
- ToolStripGrip.cs
- SmtpAuthenticationManager.cs
- ParsedRoute.cs
- InfoCardConstants.cs
- NativeMethods.cs
- DetailsViewRow.cs
- PropertyValue.cs
- BitmapEditor.cs
- EditorPartChrome.cs
- WebPartConnectionsEventArgs.cs
- XmlReader.cs
- CodeArrayCreateExpression.cs
- DocumentOrderComparer.cs
- OptionalMessageQuery.cs
- EmissiveMaterial.cs
- SqlDependencyListener.cs
- XamlTypeMapper.cs
- IntSecurity.cs
- XmlSchemaAnnotated.cs
- ContextStaticAttribute.cs
- ObjectListItem.cs
- PropertyGroupDescription.cs
- CompositeCollection.cs
- RIPEMD160.cs
- DataGridViewControlCollection.cs
- DeploymentExceptionMapper.cs