diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -11,3 +11,5 @@ Implab.Fx/bin/
Implab.Fx.Test/bin/
Implab.Fx.Test/obj/
_ReSharper.Implab/
+Implab.Diagnostics.Interactive/bin/
+Implab.Diagnostics.Interactive/obj/
diff --git a/Implab.Diagnostics.Interactive/Implab.Diagnostics.Interactive.csproj b/Implab.Diagnostics.Interactive/Implab.Diagnostics.Interactive.csproj
new file mode 100644
--- /dev/null
+++ b/Implab.Diagnostics.Interactive/Implab.Diagnostics.Interactive.csproj
@@ -0,0 +1,83 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {1DB7DB0C-8AA9-484B-A681-33AE94038391}
+ Library
+ Properties
+ Implab.Diagnostics.Interactive
+ Implab.Diagnostics.Interactive
+ v4.5
+ 512
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ TraceForm.cs
+
+
+ UserControl
+
+
+ TraceViewControl.cs
+
+
+
+
+
+ {f550f1f8-8746-4ad0-9614-855f4c4b7f05}
+ Implab
+
+
+
+
+ TraceForm.cs
+
+
+ TraceViewControl.cs
+
+
+
+
+
\ No newline at end of file
diff --git a/Implab.Diagnostics.Interactive/InteractiveTracer.cs b/Implab.Diagnostics.Interactive/InteractiveTracer.cs
new file mode 100644
--- /dev/null
+++ b/Implab.Diagnostics.Interactive/InteractiveTracer.cs
@@ -0,0 +1,55 @@
+using Implab.Parallels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Implab.Diagnostics.Interactive
+{
+ public class InteractiveTracer: Disposable
+ {
+ TraceForm m_form;
+ SynchronizationContext m_syncGuiThread;
+ readonly IPromiseBase m_completed;
+ readonly Promise