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)
{
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SystemIcmpV6Statistics.cs
- x509utils.cs
- DataListCommandEventArgs.cs
- CodeIdentifier.cs
- PermissionSetEnumerator.cs
- FunctionDetailsReader.cs
- SHA1CryptoServiceProvider.cs
- PeerEndPoint.cs
- HtmlTable.cs
- UserControlAutomationPeer.cs
- StrokeFIndices.cs
- SystemIcmpV6Statistics.cs
- SerializationAttributes.cs
- AuthenticatedStream.cs
- DataSourceSelectArguments.cs
- MatrixValueSerializer.cs
- CompilationPass2Task.cs
- TripleDESCryptoServiceProvider.cs
- MetadataItemCollectionFactory.cs
- MILUtilities.cs
- BroadcastEventHelper.cs
- ScrollableControl.cs
- AttributedMetaModel.cs
- AsyncResult.cs
- StrokeNode.cs
- BindingExpressionUncommonField.cs
- CollectionChange.cs
- DbProviderFactories.cs
- PlatformNotSupportedException.cs
- AnchoredBlock.cs
- TypeValidationEventArgs.cs
- UIElementPropertyUndoUnit.cs
- Decoder.cs
- Unit.cs
- GridEntry.cs
- KeyGestureConverter.cs
- Unit.cs
- FixedFindEngine.cs
- CodeFieldReferenceExpression.cs
- AsyncOperationManager.cs
- ColumnReorderedEventArgs.cs
- Stopwatch.cs
- Bitmap.cs
- InstancePersistenceException.cs
- PropertyGridEditorPart.cs
- Point3DAnimationUsingKeyFrames.cs
- XmlSchemaComplexContent.cs
- ObjectPersistData.cs
- HwndKeyboardInputProvider.cs
- VisemeEventArgs.cs
- HttpModuleCollection.cs
- DoubleLinkList.cs
- RuntimeHandles.cs
- SelectedCellsChangedEventArgs.cs
- XPathAxisIterator.cs
- TextEvent.cs
- DbReferenceCollection.cs
- ExpandedWrapper.cs
- DesignerWebPartChrome.cs
- mactripleDES.cs
- listviewsubitemcollectioneditor.cs
- InputLanguageSource.cs
- BuildResultCache.cs
- IteratorDescriptor.cs
- TagNameToTypeMapper.cs
- ItemCheckedEvent.cs
- FactoryMaker.cs
- DataObjectFieldAttribute.cs
- EFDataModelProvider.cs
- SqlWebEventProvider.cs
- DotAtomReader.cs
- Pts.cs
- WaitForChangedResult.cs
- BoolLiteral.cs
- ValidationHelpers.cs
- HandleRef.cs
- ColorContext.cs
- Tuple.cs
- Compilation.cs
- RuntimeCompatibilityAttribute.cs
- MulticastDelegate.cs
- WindowsRichEdit.cs
- Command.cs
- XmlArrayItemAttribute.cs
- DataServiceProviderMethods.cs
- LinqDataSourceValidationException.cs
- WebConfigurationHostFileChange.cs
- CodeSnippetTypeMember.cs
- Types.cs
- FontStretch.cs
- URLAttribute.cs
- BitmapEncoder.cs
- SqlHelper.cs
- Ops.cs
- QilInvoke.cs
- DBSqlParserTableCollection.cs
- HttpProcessUtility.cs
- DoubleLink.cs
- DecimalAnimation.cs
- ShapingEngine.cs