root/plot/Pybrary.Plot/EventObject.cs

Revision 746, 1.5 kB (checked in by mfenniak, 2 years ago)

--

Line 
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Diagnostics;
5
6 namespace Pybrary.Plot
7 {
8     public class EventObject
9     {
10         public event EventHandler OnChanged;
11         private int eventsSuspended = 0;
12         private bool eventsSuspendedRaise = false;
13
14         public IDisposable SuspendEvents()
15         {
16             eventsSuspended++;
17             return new EventSuspendTicket(this);
18         }
19
20         private void ResumeEvents()
21         {
22             Debug.Assert(eventsSuspended != 0, "ResumeEvents called more than SuspendEvents");
23             if (eventsSuspended > 0)
24                 eventsSuspended--;
25             if (eventsSuspended == 0 && eventsSuspendedRaise)
26             {
27                 eventsSuspendedRaise = false;
28                 raiseEvent();
29             }
30         }
31
32         protected void raiseEvent()
33         {
34             if (eventsSuspended != 0)
35             {
36                 eventsSuspendedRaise = true;
37                 return;
38             }
39
40             EventHandler tmp = OnChanged;
41             if (tmp != null)
42                 tmp(this, null);
43         }
44
45         private class EventSuspendTicket : IDisposable
46         {
47             private EventObject o;
48             public EventSuspendTicket(EventObject o)
49             {
50                 this.o = o;
51             }
52             public void Dispose()
53             {
54                 this.o.ResumeEvents();
55             }
56         }
57     }
58 }
Note: See TracBrowser for help on using the browser.