public async Task Refresh_ForCharacteristicsHeightSpeedNotFound_DoesNotNotify( ) { var sut = CreateSut( ); ServiceWrapper.Uuid .Returns(sut.GattServiceUuid); sut.Initialize <ReferenceOutput> ( ); Wrappers.Remove(ReferenceOutput.HeightSpeed); await sut.Refresh( ); _subjectHeightSpeed.DidNotReceive( ) .OnNext(Arg.Any <RawValueChangedDetails> ( )); }
/// <summary> /// ComWrapper クラスが管理しているラッパークラスのコレクションからラッパークラスを取り出します。 /// コレクションに無い場合は、CreateComWrapper メソッドを呼び出し、インスタンスを作成します。 /// </summary> /// <param name="comObject">ラップする COM オブジェクト。</param> /// <returns>comObject に対応したラッパークラスのインスタンス。</returns> protected ComWrapper GetComWrapper(object comObject) { using (SafeComObject key = new SafeComObject(comObject)) { if (Wrappers.TryGetValue(key, out ComWrapper comWrapper)) { if (!comWrapper.IsDisposed) { return(comWrapper); } else { Wrappers.Remove(comWrapper); } } ComWrapper wrapper = CreateComWrapper(key.Target, key.TypeName); wrapper.Root = Root; key.OwnsHandle = false; // comObject を解放しない return(wrapper); } }
/// <summary> /// 使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。 /// </summary> /// <param name="disposing">マネージ リソースとアンマネージ リソースの両方を解放する場合は true。アンマネージ リソースだけを解放する場合は false。</param> protected override void Dispose(bool disposing) { if (disposing) { if (HasSinkObjects) { foreach (var so in SinkObjects) { so.Dispose(); } } Wrappers.Remove(this); if (wrappers != null) { // 新しいものから Dispose var array = wrappers.ToList(); for (int i = array.Count - 1; i >= 0; i--) { array[i].Dispose(); } } } ComObject.Dispose(); }