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
- TraceSwitch.cs
- StreamWriter.cs
- Border.cs
- GuidelineSet.cs
- TagElement.cs
- SchemaNotation.cs
- WebResponse.cs
- PersonalizableTypeEntry.cs
- StubHelpers.cs
- FontUnitConverter.cs
- TripleDESCryptoServiceProvider.cs
- WorkflowService.cs
- FileDialog.cs
- PrintDialogException.cs
- PerformanceCounters.cs
- AnnotationObservableCollection.cs
- DataSysAttribute.cs
- Control.cs
- TextRange.cs
- NameValuePermission.cs
- PropertyKey.cs
- translator.cs
- MachineKeyValidationConverter.cs
- configsystem.cs
- Path.cs
- RuntimeHandles.cs
- EventSinkHelperWriter.cs
- SerializationInfo.cs
- CompositeDuplexElement.cs
- FlowDocumentPage.cs
- HttpHandlersSection.cs
- HttpListenerResponse.cs
- MailWebEventProvider.cs
- EpmContentDeSerializerBase.cs
- ProviderManager.cs
- MouseGestureConverter.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- SystemIPv4InterfaceProperties.cs
- DbDataRecord.cs
- ListBase.cs
- ProxyManager.cs
- CalendarBlackoutDatesCollection.cs
- PagesSection.cs
- IdleTimeoutMonitor.cs
- DBSchemaTable.cs
- ArrayList.cs
- WebServiceHandlerFactory.cs
- HelpFileFileNameEditor.cs
- PanelStyle.cs
- MetadataCollection.cs
- SystemResources.cs
- EpmHelper.cs
- SpeakProgressEventArgs.cs
- DataGridRowsPresenter.cs
- ListBindingConverter.cs
- AudioFormatConverter.cs
- TextTabProperties.cs
- ToolStripCollectionEditor.cs
- RenderingEventArgs.cs
- TypeLibConverter.cs
- BuildManager.cs
- DrawingImage.cs
- DataSvcMapFile.cs
- PeerTransportSecuritySettings.cs
- Enum.cs
- TablePatternIdentifiers.cs
- UntrustedRecipientException.cs
- XmlSchemaObjectTable.cs
- SqlBulkCopyColumnMappingCollection.cs
- QueryOutputWriter.cs
- MemberInfoSerializationHolder.cs
- SourceLineInfo.cs
- newinstructionaction.cs
- ActiveXContainer.cs
- SEHException.cs
- SevenBitStream.cs
- TargetControlTypeCache.cs
- XmlDataSource.cs
- TreeWalkHelper.cs
- DataGridViewCellStateChangedEventArgs.cs
- ExpressionNode.cs
- GridViewDeleteEventArgs.cs
- OleDbConnectionInternal.cs
- ExtensionFile.cs
- RoleManagerEventArgs.cs
- TabletDevice.cs
- FtpCachePolicyElement.cs
- DataGridViewTextBoxCell.cs
- WebBrowser.cs
- GlyphsSerializer.cs
- TimeSpanValidatorAttribute.cs
- XmlObjectSerializerContext.cs
- SoapAttributeAttribute.cs
- DispatcherExceptionEventArgs.cs
- Pens.cs
- TextBoxView.cs
- DirectoryRootQuery.cs
- OracleBinary.cs
- EventDescriptor.cs
- VisualTreeUtils.cs