Mercurial > pub > ImplabNet
comparison Implab.Diagnostics.Interactive/InteractiveTracer.cs @ 45:d10034588e38 interactive logger
initial work on interactive logger
| author | cin |
|---|---|
| date | Thu, 17 Apr 2014 03:05:53 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 42:3ba6778ed336 | 45:d10034588e38 |
|---|---|
| 1 using Implab.Parallels; | |
| 2 using System; | |
| 3 using System.Collections.Generic; | |
| 4 using System.Linq; | |
| 5 using System.Text; | |
| 6 using System.Threading; | |
| 7 using System.Threading.Tasks; | |
| 8 using System.Windows.Forms; | |
| 9 | |
| 10 namespace Implab.Diagnostics.Interactive | |
| 11 { | |
| 12 public class InteractiveTracer: Disposable | |
| 13 { | |
| 14 TraceForm m_form; | |
| 15 SynchronizationContext m_syncGuiThread; | |
| 16 readonly IPromiseBase m_completed; | |
| 17 readonly Promise<object> m_started = new Promise<object>(); | |
| 18 | |
| 19 public InteractiveTracer() { | |
| 20 m_completed = AsyncPool.InvokeNewThread(() => { | |
| 21 GuiThread(); | |
| 22 return 0; | |
| 23 }); | |
| 24 | |
| 25 m_started.Join(); | |
| 26 } | |
| 27 | |
| 28 void GuiThread() { | |
| 29 m_form = new TraceForm(); // will create SynchronizationContext | |
| 30 m_syncGuiThread = SynchronizationContext.Current; | |
| 31 m_started.Resolve(); | |
| 32 Application.Run(); | |
| 33 } | |
| 34 | |
| 35 public void ShowForm() { | |
| 36 m_syncGuiThread.Post(x => m_form.Show(), null); | |
| 37 } | |
| 38 | |
| 39 public void HideForm() { | |
| 40 m_syncGuiThread.Post(x => m_form.Hide(), null); | |
| 41 } | |
| 42 | |
| 43 void Terminate() { | |
| 44 m_syncGuiThread.Post(x => Application.ExitThread(), null); | |
| 45 } | |
| 46 | |
| 47 protected override void Dispose(bool disposing) { | |
| 48 if (disposing) { | |
| 49 Terminate(); | |
| 50 m_completed.Join(); | |
| 51 } | |
| 52 base.Dispose(disposing); | |
| 53 } | |
| 54 } | |
| 55 } |
