static void Disposing(int toms) { Logger.Trace("Launching dispose monitor"); var thread = new Thread(() => { var dl = DateTime.Now.AddMilliseconds(toms); Logger.Trace("Dispose monitor DL {0}", dl.ToString("HH:mm:ss.fff")); while (true) { if (DateTime.Now > dl) { throw ExceptionTools.Make("Timeout with dispose count {0}", Disposable.Undisposed); } if (Disposable.Undisposed == 0) { Logger.Trace("Dispose zero count detected"); Environment.Exit(0); } Thread.Sleep(100); } }); thread.IsBackground = true; thread.Name = "DisposeMonitor"; thread.Start(); }
public void WaitFor(int toms, string format, params object[] args) { var dl = DateTime.Now.AddMilliseconds(toms); var pattern = TextTools.Format(format, args); while (true) { //Logger.Trace("POPPING for {0}", pattern); var line = input.Pop(1, null); //if (line == null) Logger.Trace("POP <NULL>"); //if (line != null) Logger.Trace("POP {0}", line); //Beware | is regex reserved `or` if (line != null && Regex.IsMatch(line, pattern)) { break; } //if (DateTime.Now > dl) Logger.Trace("Timeout waiting for `{0}`", TextTools.Readable(pattern)); if (DateTime.Now > dl) { throw ExceptionTools.Make("Timeout waiting for `{0}`", TextTools.Readable(pattern)); } } }