1、SortedList , 删除所有元素,直接用clear即可,如果用for循环,挨个remove,以count作为终止符,会由于count随着删除越来越小,导致不完全删除
拷贝sortedlist,如果直接赋值,例如sortedlist a=b,会由于b的变化而直接改变a,sortedlist应该是个引用副本。目前想到的是直接new一个,然后逐个赋值,这个可以解决。
2、devexpress的GirdView 注意有control和view 的区别,选中某一行的话,用view的鼠标响应比较好,选中的GetFocusedRowCellValue这个函数,参数是Field,数据库的FIeld不是列名
3、用datatable更新,注意endedit后,只是将当前的datatable更新了,并没有更新到数据库里去,还掉用数据库的值得话,会发现没有更新。需要重新load一下。
4、要在其他类中show或者hide一个Form类的话,最好是用UI.Invoke,不然会卡,或者效果不理想
5、相机代的GrabEnd Event,如果在其中重写方法,方法中包括Invoke UI刷新图像的话,如果在其他函数中StopGrab,在beginGrab,有可能会由于图像刷新的最后一张还没有执行完,导致GrabEnd 的Event没有执行结束,直接BeginGrab导致报错。另开一个线程,或者将BeginGRab放在UI线程的Invoke里会比较好。
6、DevExpress的GridView控件,可以直接设置条件,触发变颜色什么的动作,很方便。
7、DataAdapter 和DataTable ,配合Access数据库,真是神器啊。太方便了。
如果datatable先导入一次,clear并没有清除的作用,要么要delete,并accept,这样是更改数据库内文件。
如果要更新datatable,需要new一个全新的。clear什么的不管用。
datarow也是一样,必须new一个新的。
8、尽量所有的函数,线程,都加上try catch,捕捉错误。
exception可以捕获到所有错误,在项目开发初期完全可以用这个捕获所有异常,防止挂机,假死等,也发便调试。
9、Form程序调用Console,弹窗报错太烦,用console逐行显示所有错误
(54条消息) C# WinForm 应用程序 开启Console窗口_weixin_34041003的博客-CSDN博客
10、一个很诡异的问题,不知道原因,一个FORM类中一个函数,调用datatableupdate函数,都会导致线程卡死。类似下文。
只能尽量不这么用了。
如果调用gridview的UpdateCurrentRow()更新;估计还是因为update的时候要触发UI线程了。
Form::fun1{
enable =true; 另一个线程开始动作
while(result)//等待另一个线程执行完,由于在fun2中卡死了,所以循环出不来。
{}
}
Form::fun2 //可以调进来执行
{
datatable.update();//当update操作时,线程卡死
}
class2:func
{
if (enable)
{
Form.fun2;
}
result=false;
}
但是用一个class::func 中,加一个UI线程begininvoke form.fun2, 问题就解决了。
所以还是UI线程的调用问题。
- 调用access数据库,用“insert into 表1 (result) values (” + result+”)“,居然会报错,因为表中的列头result 和变量名result冲突。。。把表的列名改为result1就可以了。。。好奇怪。。。