public static IDisposable DoWithOpenDoc(this SldWorks swApp, Func <IModelDoc2, IDisposable> action) { return(swApp.DocOpenObservable() .SelectMany(doc => { var disposable = action(doc); return doc .DestroyNotify2Observable() .FirstAsync() .Select(_ => disposable); }) .Subscribe(disposable => disposable.Dispose())); }
public static IDisposable DoWithOpenDoc(this SldWorks swApp, Func <IModelDoc2, IDisposable> action) { var d = new CompositeDisposable(); swApp.DocOpenObservable() .SelectDisposable(d, action, (doc, disposable) => doc .DestroyNotify2Observable() .FirstAsync() .Select(_ => disposable) ) .SelectMany(p => p) .Subscribe(disposable => disposable.Dispose()) .DisposeWith(d); return(d); }