最近写程序的过程中遇到两个问题:
问题1.多线程操作数据的问题,菜鸟就是菜鸟,之前写的程序从来都没考虑过多线程的问题,现在是出问题了,才想有必要去解决一下,对多线程了解太少,我的问题说起来很简单,都没牵扯到数据库。
具体描述:数据源是一个List<float>的全局变量,程序运行时,按下“开始”按钮,主线程中有一个事件在不停的接收数据,接收到数据之后,经过处理,就add到list数据源中;同时启动另一个线程(Timer)定时的去读取数据,显示在界面上,然后,显示多少个数据,就remove掉多少个数据,
这中间可能出现,在显示(remove)的过程中,主线程同时在往里面add,会提示“集合已修改的错误”
看了些多线程的东西,有三种方法,当然我之前只听过lock,基本上用的都是lock一个多线程执行的代码块,
看一些例子,在所有操作list的地方,用lock(list)直接锁定引用类型的变量,不知道这么做对不对,好不好?
没办法,基础太差,让你们笑话了
问题2:
一起用委托,都是用一个格式的方法写,也不知道用匿名委托,也不知道匿名委托有什么优点,
现在想学习一下,只知道匿名委托省略了委托的声明,
现在有这样一个实例,
类A,类B,
在A中写了一个公共的事件,在类B中声明了一个A类的对象。并且注册了A的事件,
B中注册事件关联到一个执行方法,以前都是用
powerData.ShowChange+=new PowerData.ShowChangeHandle(powerData_ShowChange);
这种方法的,这是不是就是将一个方法绑定到一个事件上去,参考了别人的匿名委托的例子,于是现在我改用下面这种匿名委托方法,编译没问题,想问的是,这种方法有效吗?可行吗?比起上面那种,有什么优点?
powerData = new PowerData();
powerData.ShowChange += delegate(PORT_STATUS.COM_STATUS STATUS)
{
powerData_ShowChange(STATUS);
};