关于多线程,数据绑定及类存储的有关问题

关于多线程,数据绑定及类存储的问题
MainPage.xaml.cs
 
        Task A;
        public MainPage()
        {
            InitializeComponent();
            Class1 cl = new Class1
            {
                Second = 600
            };
            collecion.Add(cl);
            A = new Task(() => Task_A());
            A.Start();
        }
        private void Task_A()
        {
           Class1 cl = new Class1
            {
                Second = 600
            };
            collecion.Add(cl);
        }

Class1.cs

public class Class1: INotifyPropertyChanged
    {
        
        int second;

        public event PropertyChangedEventHandler PropertyChanged;

        public Class1()
        {
        }
        public int Second
        {
            set
            {
                if (value != second)
                {
                    second = value;
                    OnPropertyChanged(new PropertyChangedEventArgs("Second"));
                }
            }
            get
            {
                return second;
            }
        }

     

        protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, args);
        }        
    }  



请原谅这两段程序的诸多错误,我主要还是参考别人的程序来写,对C#的架构不这么了解。我想问的是,如何在多线程下和多线程外都能修改Class1这个类。我的面板上的显示控件式与这个Class1有数据绑定的。然后实现多线程下刷新数据的作用。
------解决思路----------------------
这样应该执行不了,对Second的修改会影响到ui,所以必须在ui线程,在wp里面,无论new 一个thread还是task都会默认在后台线程执行,只能把对thread的赋值放到dispatcher.begininvoke()里面,注意前面这个函数会将切换到ui但是在你new的这个task里面是异步的,想要同步执行需要一些线程锁来辅助控制,比较方便的传统的可以用AutoResetEvent,新的解决方案是 TaskCompletionSource,具体的百度吧
------解决思路----------------------
改值没啥问题,它本身不涉及线程,你随便怎么改,但是你要知道,触发PropertyChanged事件这事,必须要在UI线程才行,所以一般MVVM框架都会自带这些方法。
想要正常使用,只要保证你的PropertyChanged在UI线程上执行就可以了,你可以修改一下你的OnPropertyChanged方法,把UI的Dispatcher传进来,然后BeginInvoke。
------解决思路----------------------
个人建议加上BEGININVOKE,比较好。
------解决思路----------------------
引用:
Quote: 引用:

出错了?应该不会先跨线程的错误吧,binding自身可以处理多线程间的访问的。

我是看到数据绑定好像可以跨线程,更新数据的,所以才这么搞的。其实我的问题挺简单的,就是我建了个类,然后如何在多个CS文件下访问这个类的数据,及修改它。以前都不跨CS所以只用new新建来做缓存。

什么事多个CS???你想说的是在其他类中访问同一份数据是吧。
单件模式正好满足你需要。具体的写法网上一大推,自己找吧。


插播点题外话,C#的编译器是不在乎你的文件名和类名是否一样,以及一个类也是可以分别写在多个文件中的、一个文件中也可以写多个类的。