用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);
}
}
}
{
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);
}
}
}
相关文章推荐
- 解决ListView1的界面数据与内存不一致问题,将内存数据更新到界面上
- 测试代码,解决java gui swing多线程界面假死、僵死问题,实现界面动态刷新,动态同步更新数据
- ListView中开启线程查询更新数据导致的ViewHolder错乱问题解决
- 解决ListView1的界面数据与内存不一致问题,将内存数据更新到界面上
- C# Winform使用线程,委托定时更新界面UI控件,解决界面卡顿问题
- EF延迟加载机制导致的更新数据的时候有的更新有的没更新问题的解决
- 使用 ajax json(getJSON)从服务器读取数据,在IE下不更新问题解决
- linq更新数据冲突问题解决
- Oracle下批量update数据导致JDBC线程挂起的问题的解决
- 关于Hibernate设置一对多关系时更新一方数据时多方外键丢失问题解决
- 解决HTTP数据不更新问题——no-cache在HTTP通信协议中的应用收藏
- 解决SpringBoot更新数据到MySQL乱码问题
- 解决SpringBoot更新数据到MySQL乱码问题
- iOS 中C如何调用Objective c的代码更新界面问题解决
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- 安卓4.0以后主线程访问网络问题(NetworkOnMainThreadException)解决方法及子线程更新ui
- QT Creator 使用 design 修改 ui界面编译后界面未更新问题的解决 From EricQu
- 一致性控制——解决线程间数据传递问题
- fusionCharts dataStreamURL获取服务端数据更新问题解决
- C# 线程中更新ListView某单元格导致闪烁问题的解决