public void BindAnalyzer(IOProvider io) { this.io = io; io.ByteRead += b => { if (!TimeDomainsManager.Instance.TryGetVirtualTimeStamp(out var vts)) { // it happens when writing from uart analyzer vts = new TimeStamp(default(TimeInterval), EmulationManager.ExternalWorld); } UART.GetMachine().HandleTimeDomainEvent(UART.WriteChar, (byte)b, vts); }; Action <byte> writeAction = (b => { lock (lockObject) { io.Write(b); } }); var mre = new ManualResetEventSlim(); Task.Run(() => { lock (lockObject) { mre.Set(); RepeatHistory(); UART.CharReceived += writeAction; actionsDictionary.Add(io, writeAction); } }); mre.Wait(); }