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
- SpinLock.cs
- SspiHelper.cs
- OutputCacheSettingsSection.cs
- RoutedEventHandlerInfo.cs
- OutputCacheEntry.cs
- EncodingTable.cs
- VerticalAlignConverter.cs
- JournalNavigationScope.cs
- UnsafeNativeMethods.cs
- InvokeGenerator.cs
- LockedHandleGlyph.cs
- TextDecoration.cs
- MeasureItemEvent.cs
- DataControlReference.cs
- SqlTopReducer.cs
- UrlRoutingModule.cs
- StrongNameSignatureInformation.cs
- XmlDataProvider.cs
- BuildResult.cs
- HttpDebugHandler.cs
- LongValidator.cs
- EventWaitHandle.cs
- ObjectConverter.cs
- XmlEncodedRawTextWriter.cs
- DetailsView.cs
- SqlDataSourceCache.cs
- ImageIndexConverter.cs
- Grid.cs
- PageEventArgs.cs
- QuaternionIndependentAnimationStorage.cs
- ManagementQuery.cs
- WindowsTreeView.cs
- PreviewPrintController.cs
- TextBoxAutoCompleteSourceConverter.cs
- PropertyValue.cs
- HtmlTitle.cs
- PipelineModuleStepContainer.cs
- IsolatedStorageException.cs
- CodeConstructor.cs
- TextTreeFixupNode.cs
- CacheSection.cs
- Point.cs
- ContainerFilterService.cs
- XPathNode.cs
- TimerElapsedEvenArgs.cs
- WindowsContainer.cs
- TableCellCollection.cs
- RightsManagementErrorHandler.cs
- RightsManagementEncryptionTransform.cs
- Memoizer.cs
- GridItemCollection.cs
- DataColumnMappingCollection.cs
- NavigationExpr.cs
- ReachDocumentPageSerializer.cs
- DBBindings.cs
- CheckBox.cs
- UrlPropertyAttribute.cs
- SQLInt64Storage.cs
- RetrieveVirtualItemEventArgs.cs
- SmiEventStream.cs
- Overlapped.cs
- IdentityReference.cs
- InternalBufferManager.cs
- TdsParserStateObject.cs
- DeferredSelectedIndexReference.cs
- ScrollBarAutomationPeer.cs
- TabletCollection.cs
- Size.cs
- WindowsScroll.cs
- PrivateFontCollection.cs
- ContentFilePart.cs
- AcceleratedTokenAuthenticator.cs
- PreloadHost.cs
- XPathScanner.cs
- AppLevelCompilationSectionCache.cs
- TabControlCancelEvent.cs
- RepeatInfo.cs
- DataObjectFieldAttribute.cs
- Pen.cs
- InvariantComparer.cs
- SerializeAbsoluteContext.cs
- KnownAssembliesSet.cs
- WebReferencesBuildProvider.cs
- PropertyHelper.cs
- ToolTipService.cs
- CaretElement.cs
- BitmapCodecInfoInternal.cs
- ImageFormatConverter.cs
- FontStretches.cs
- ConstNode.cs
- SequentialUshortCollection.cs
- ParallelRangeManager.cs
- TextBox.cs
- SHA1CryptoServiceProvider.cs
- CancellationToken.cs
- CompModSwitches.cs
- TextBoxBase.cs
- PolyBezierSegment.cs
- SID.cs
- ISCIIEncoding.cs