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)
{
List speechEvents = 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)
{
List speechEvents = 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
- NotificationContext.cs
- SettingsProperty.cs
- FocusWithinProperty.cs
- RevocationPoint.cs
- CultureInfoConverter.cs
- ScanQueryOperator.cs
- Inline.cs
- InternalsVisibleToAttribute.cs
- HttpModuleAction.cs
- RequestQueryProcessor.cs
- CustomWebEventKey.cs
- DataControlFieldCell.cs
- ProcessManager.cs
- SqlMethodTransformer.cs
- ACE.cs
- JumpList.cs
- SafeRightsManagementPubHandle.cs
- Point.cs
- XPathPatternParser.cs
- DbConnectionStringBuilder.cs
- DispatcherOperation.cs
- VarInfo.cs
- ConnectionOrientedTransportChannelFactory.cs
- ExpressionParser.cs
- ImpersonationContext.cs
- VerificationException.cs
- Material.cs
- CacheMode.cs
- LayoutTable.cs
- XmlSchemaParticle.cs
- OleDbError.cs
- ParseHttpDate.cs
- UpdateTranslator.cs
- CodeSnippetExpression.cs
- MaterialGroup.cs
- SmiMetaDataProperty.cs
- InputLanguageEventArgs.cs
- SeekStoryboard.cs
- TypefaceMap.cs
- TraceFilter.cs
- ClientType.cs
- Renderer.cs
- UnhandledExceptionEventArgs.cs
- XPathDocumentNavigator.cs
- ResourceExpression.cs
- TransformConverter.cs
- XmlLanguage.cs
- TTSEvent.cs
- EventSourceCreationData.cs
- OdbcCommand.cs
- ObjectDataSourceMethodEventArgs.cs
- Brush.cs
- Thread.cs
- GridViewSortEventArgs.cs
- VisualTarget.cs
- WorkflowMarkupSerializationManager.cs
- DesignerImageAdapter.cs
- MouseEventArgs.cs
- SystemDropShadowChrome.cs
- SHA256.cs
- TrustManagerMoreInformation.cs
- SByte.cs
- IdentityNotMappedException.cs
- MsmqChannelListenerBase.cs
- BasePattern.cs
- HttpModuleAction.cs
- HttpAsyncResult.cs
- CompoundFileStorageReference.cs
- LexicalChunk.cs
- XsdBuildProvider.cs
- AccessControlEntry.cs
- Camera.cs
- SystemIPInterfaceProperties.cs
- PropertyPathWorker.cs
- SynchronousChannel.cs
- CommandEventArgs.cs
- Publisher.cs
- FixedStringLookup.cs
- ShaperBuffers.cs
- RefExpr.cs
- ComponentEvent.cs
- ScrollBarRenderer.cs
- Decimal.cs
- HtmlUtf8RawTextWriter.cs
- TextTreeObjectNode.cs
- FtpWebRequest.cs
- ColumnHeaderConverter.cs
- SafeFileHandle.cs
- SecurityTokenException.cs
- ToolStripRenderEventArgs.cs
- DesignerActionGlyph.cs
- SimpleBitVector32.cs
- Size3DConverter.cs
- PageSetupDialog.cs
- TabControl.cs
- MarginsConverter.cs
- DesignerAutoFormatStyle.cs
- InteropTrackingRecord.cs
- OneOfTypeConst.cs
- WebHeaderCollection.cs