protected virtual void Dispose(bool disposing) { if (!_disposed) { if (_queue != null) { _queue.Stop(); if (disposing) _queue.Dispose(); _queue = null; } if (_poller != null) { _poller.Dispose(); _poller = null; } if (_sender != null) { _sender.ApplicationStarted -= StartApplicationCompleted; _sender.ChannelFaulted -= ChannelFaulted; _sender.MessageReceived -= OnServerEventReceived; if (disposing) _sender.Dispose(); _sender = null; } // outbound thread should shut down after sender is shut down if (_outboundThread != null) { lock (_outboundQueueSync) Monitor.Pulse(_outboundQueueSync); if (_outboundThread.IsAlive) { _outboundThread.Join(500); } _outboundThread = null; } CompositionTarget.Rendering -= CompositionTargetRendering; _disposed = true; } }
private void StopThreads() { if (_queue != null) { _queue.Dispose(); _queue = null; } if (_outboundThread != null) { if (_outboundThread.IsAlive) { _outboundThread.Abort(); _outboundThread.Join(); } _outboundThread = null; } if (_poller != null) { _poller.Dispose(); _poller = null; } }
public void Initialize(ApplicationStartupParameters appParameters) { try { if (_queue == null) _queue = new MessageQueue(DoSend); CompositionTarget.Rendering += CompositionTargetRendering; _sender = new ServerMessageSender(); _sender.ApplicationStarted += StartApplicationCompleted; _sender.ChannelFaulted += ChannelFaulted; _sender.MessageReceived += OnServerEventReceived; _sender.ChannelOpening += OnChannelOpening; _sender.ChannelOpened += OnChannelOpened; _sender.Intialize(); } catch (Exception ex) { var args = new ServerChannelFaultEventArgs { Error = ex }; ChannelFaulted(this,args); } }