日期:2014-05-17  浏览次数:20793 次

请问C#里多线程共享数据的问题
大家好,我写的WPF程序里加了一个后台线程用来采集数据,需要传人一个Model当做调用数据采集函数的参数,但是这个Model又有一些属性需要在图形界面当中刷新。因此碰到了共享数据的问题。

  我现在的做法是每次开始采集之前建一个这个Model的深拷贝送进采集数据的线程,然后采完了再赋值给原先的Model,但是每次采集都要先申请个深拷贝总感觉不太舒服,如果我把这个Model跟Model的拷贝能像值类型那样固定下来不用分配空间就好了。

  不知道这种情况大家一般怎么解决呢?

------解决方案--------------------
这个不是共享的问题,只是UI不能跨线程访问的限制,你需要用Invoke来保证UI的组件被跨线程访问
------解决方案--------------------
可以用backgroundworker 来实现
------解决方案--------------------
之前我开过帖子讨论过这个问题,虽然有几种能够实现的做法,但不是线程安全的,还是在自己的线程中取得数据,然后再ui线程中更新ui的好。另外不明白你为什么要深拷贝一个来传值,
只要model不直接操作画面ui,线程中是可以直接对这个直接操作的