public static bool Dump(object block, string heading) { if (block == null) { return(false); } if (string.IsNullOrEmpty(heading)) { heading = block.GetType().FormatTypeName(); } try { BlockWatcher watcher = new BlockWatcher(block, heading); OutputPanel panel = PanelManager.StackWpfElement(watcher, "Dataflow"); panel.QueryEnded += delegate(object sender, EventArgs e) { if (panel.IsQueryCanceled) { watcher.Cancel(); } }; panel.PanelClosed += delegate(object sender, EventArgs e) { watcher.Cancel(); }; return(true); } catch (Exception exception) { Log.Write(exception, "Dataflow Dump"); return(false); } }
public static void StackWpfControl(this System.Windows.UIElement element, string title = null) { if (string.IsNullOrEmpty(title)) { title = "&Custom"; } PanelManager.StackWpfElement(element, title); }
public static void DumpLive <T>(IObservable <T> obs, string heading) { ObservablePresenter presenter; OutputPanel outPanel; ManualResetEvent ready; IDisposable extensionToken; Server currentServer = Server.CurrentServer; if (currentServer != null) { object obj2; presenter = null; outPanel = null; ready = new ManualResetEvent(false); Action action = delegate { presenter = new ObservablePresenter(); outPanel = PanelManager.StackWpfElement(WrapInHeading(presenter, heading), "Live &Observables"); ready.Set(); }; lock ((obj2 = _threadLocker)) { if (currentServer != _lastServer) { _lastServer = currentServer; } if (currentServer.IsOnMainQueryThread) { action(); } else { currentServer.RunOnMessageLoopThread(action); } } int num = 0; while (true) { lock ((obj2 = _threadLocker)) { if ((((currentServer != _lastServer) || currentServer.MessageLoopEnded) || currentServer.CancelRequest) || (num++ > 20)) { return; } } if (ready.WaitOne(500, false)) { extensionToken = Util.GetQueryLifeExtensionToken(); try { IDisposable subscription = null; CancelToken cancelToken = new CancelToken(); Action cancel = delegate { IDisposable disposable1 = subscription; if (disposable1 != null) { disposable1.Dispose(); } else { cancelToken.Cancel(); } }; outPanel.QueryEnded += delegate(object sender, EventArgs e) { cancel(); if (!(!outPanel.IsQueryCanceled || outPanel.IsPanelClosing)) { presenter.SetCanceled(); } }; outPanel.PanelClosed += delegate(object sender, EventArgs e) { cancel(); extensionToken.Dispose(); }; Action subscribe = delegate { Action <T> onNext = null; Action <Exception> onError = null; Action onCompleted = null; try { if (onNext == null) { onNext = val => base.CS$ < > 8__localsd.presenter.SetNext(val); } if (onError == null) { onError = delegate(Exception ex) { base.CS$ < > 8__localsd.presenter.SetError(ex); base.CS$ < > 8__localsd.extensionToken.Dispose(); }; } if (onCompleted == null) { onCompleted = delegate { base.CS$ < > 8__localsd.presenter.SetComplete(); base.CS$ < > 8__localsd.extensionToken.Dispose(); }; } subscription = Subscribe <T>(obs, onNext, onError, onCompleted, presenter.Dispatcher, cancelToken); if (cancelToken.IsCancellationRequested) { subscription.Dispose(); } } catch (Exception exception) { if (subscription != null) { subscription.Dispose(); } if (exception is ThreadAbortException) { Thread.ResetAbort(); } else if (!(exception is OperationCanceledException)) { Log.Write(exception, "Rx Subscription Failure"); exception.Dump <Exception>(); } } }; new Thread(delegate { bool flag = false; try { flag = RunOnRxScheduler(subscribe); } catch (Exception exception) { Log.Write(exception); } if (!flag) { subscribe(); } }) { IsBackground = true, Name = "Rx Subscriber" }.Start(); } catch { extensionToken.Dispose(); } return; } } } }