您的位置:首页 > 其它

用SynchronizationContext解决界面的更新线程数据问题

2013-02-21 12:32 281 查看
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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐