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

来源:互联网 发布:cf出现网络出现异常 编辑:程序博客网 时间:2024/06/05 06:13
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);
            }
        }         
    }
原创粉丝点击