示例#1
0
 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);
     }
 }
示例#2
0
 public static void StackWpfControl(this System.Windows.UIElement element, string title = null)
 {
     if (string.IsNullOrEmpty(title))
     {
         title = "&Custom";
     }
     PanelManager.StackWpfElement(element, title);
 }
示例#3
0
        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;
                    }
                }
            }
        }