public void Dispose() { Interlocked.MemoryBarrier(); var strat = _strat; if( strat != null ) { _strat = null; Interlocked.MemoryBarrier(); DoAdd( new GrandOutputEventInfo(), null ); GC.SuppressFinalize( this ); _thread.Join(); } } }