Archive for the ‘csharp’ tag
ListView模拟双击事件
Windows Mobile 的 ListView 并没有直接的提供双击事件的机制,实际上他是有的,只是不叫这个名字,选中某个 item 可以触发一个 ItemActivate 的事件,而 ListView 可以选择以何种方式来触发,比如是一次单击,还是两次,如果是两次 click 的话,就可以模拟我们所需要的双击事件了。记得要把 ListView 属性中的 Activation 改成 TwoClick。
StreamWriter需要关闭
大嘴牛照着 MSDN 的文档抄了一把简单的文件写入的方法[1],但是在这篇文档里面并没有关闭这个流,大嘴牛又想当然了,结果发现实际运行的时候没有写入到该文件,必须把 close 的函数加上才可以,大嘴牛的平台是 windows mobile 的 professional emulator。例如是这样的:
StreamWriter sw = File.CreateText(fileName);
sw.WriteLine(stringa);
sw.WriteLine(stringb);
sw.Close(); // 重要
[1]. http://msdn.microsoft.com/en-us/library/system.io.file.aspx
Windows Mobile 小项目后记
大嘴牛最近在做的一个小小的关于 Windows Mobile 平台的项目,在此记录一下遇到的一些傻逼问题:
- 连接问题。Windows Mobile 的模拟器默认无法访问外部网络,必须安装 Virtual PC 2007,利用他关于虚拟机的网卡驱动还可以访问。另外还需要简单设置一下,在第一个菜单中选择 configure ,在 network 标签页中选中 connect checkbox。
- SQL语句的单引号截断问题。大嘴牛没有利用高级的 Linq 功能,而是手动组成 SQL 语句,类似像这样的
"INSERT INTO ... VALUES ('" + string + "')"但是这里如果 string 中本来就存在单引号,那么这个 SQL 语句就会被截断,从而产生错误。
- 注意程序是否有副作用。这里的副作用主要是指是否存在一些文件遗留,数据库文件遗留的问题。大嘴牛就遇到了这样的问题。在第一次模拟器上执行的时候创建一个数据库文件,随后调试终止,但是数据库文件依然存在,虽然程序中的逻辑被修改了,但是当第二次调试开始的时候,逻辑中先检查了该数据库文件是否存在,如果存在,就利用之,这就导致了新的代码可能为被执行,甚至数据库中的字段没有及时更新。
- C#的多线程参数传递。带参数的线程建立在 Mobile 平台上并不存在,那么如何对于一个 thread 传入参数呢?可以考虑将参数先作为一个类的属性传入,而是启动不带参数的函数作为线程主线索,再在这个函数中使用同一个实例刚才传入的属性。有点类似这样:
Class cl = new Class(); cl.Arg = arg; Thread thread = new Thread(new ThreadStart(cl.MainFunction));