class MySingleton
{
private System.Timers.Timer m_timer;
int m_ticker = 0;
private MySingleton()
{
m_timer = new System.Timers.Timer();
m_timer.Interval = 20;
m_timer.Elapsed+=new System.Timers.ElapsedEventHandler(m_timer_Elapsed);
m_timer.Start();
}
private static object s_lock = new object();
private static MySingleton s_single = null;
public event Action<int> TickerChanged;
public SynchronizationContext m_sc;
public static MySingleton Singleton
{
get
{
if (null != s_single)
{
return s_single;
}
Monitor.Enter(s_lock);
if (null == s_single)
{
MySingleton tem = new MySingleton();
Interlocked.Exchange(ref s_single, tem);
}
Monitor.Exit(s_lock);
return s_single;
}
}
public void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
int id=Thread.CurrentThread.ManagedThreadId;
if (null == m_sc)
{
TickerChanged(m_ticker++);
}
else
{
m_ticker++;
m_sc.Post(delegate
{
if (null != TickerChanged)
{
TickerChanged(m_ticker++);
}
}, null);
}
}
}
{
private System.Timers.Timer m_timer;
int m_ticker = 0;
private MySingleton()
{
m_timer = new System.Timers.Timer();
m_timer.Interval = 20;
m_timer.Elapsed+=new System.Timers.ElapsedEventHandler(m_timer_Elapsed);
m_timer.Start();
}
private static object s_lock = new object();
private static MySingleton s_single = null;
public event Action<int> TickerChanged;
public SynchronizationContext m_sc;
public static MySingleton Singleton
{
get
{
if (null != s_single)
{
return s_single;
}
Monitor.Enter(s_lock);
if (null == s_single)
{
MySingleton tem = new MySingleton();
Interlocked.Exchange(ref s_single, tem);
}
Monitor.Exit(s_lock);
return s_single;
}
}
public void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
int id=Thread.CurrentThread.ManagedThreadId;
if (null == m_sc)
{
TickerChanged(m_ticker++);
}
else
{
m_ticker++;
m_sc.Post(delegate
{
if (null != TickerChanged)
{
TickerChanged(m_ticker++);
}
}, null);
}
}
}