WP7多线程处理碰到的问题
之前做过一个公司的OA的财务审核流的wp7版。(http://www.cnblogs.com/xtechnet/archive/2011/06/02/2068772.html)之前代码结构有些紊乱,后来OA系统框架做了调整。前段开发方便了很多,重整针对wp7的财务审核流捋了一下。
采用Panorama 模板搭建的项目来实现页面效果,代码没有多少复杂。
审核分几类,每一类采用listbox来获取数据。数据获取最开始是一股脑直接按照顺序去执行读取函数,结果发现读取数据经常读取不到,调试的时候常会出现超时的现象。于是改成了多线程的方式来处理。
new System.Threading.Thread(() =>
{
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
{
GetSalary();
});
}).Start();
每一类数据的获取都采用这个方式处理。
现在发现了一个比较奇怪的现象,采用模拟题或者真机调试,没有一点问题。显示如下:
但是,如果把真实手机上使用这个xap,在登录系统后跳转到这个界面后,需要将手机锁屏后,再解锁屏幕,数据才能刷出来。之后退出系统(不是关闭系统,是退回到系统的登陆界面)登陆其他人的账号,这时候不用重复上面的操作,就可以读出正确的数据信息
现在还没有找到具体的原因,只能猜测:
1.代码正确,但是代码对应的效率达不到真机的机器要求,这个比较胡扯
2.针对真机实际操作,代码需要增加一些额外的刷新操作,因为我觉得在解锁时,手机进入程序的时候重新读取了页面的状态;事实上我在写到这里的时候,我突然想到:如果按一下win键,然后再点击退回键重新进入页面会怎样呢?我试了一下,发现效果和锁屏后解锁一样。这似乎给我灌输了这样一个认识:我写的代码的确是获取了正确的数据,但是这段代码在手机上运行时,没有绑定到对应的ListBox控件上,需要一个类似刷新或者ReBind的操作?
3.更换代码处理方式,确实有不少其他的处理方式可以选择。再做尝试,然后补充此文档。
补充
2012年4月6日:昨天晚上回去换成家里的wifi,首次登陆,数据正常显示。之后再登陆,就变成之前在公司测试的效果了,要重新恢复到这个页面才显示数据。这是个什么道理?
2012年4月6日9:50 之前做了一些调整,不适用Thread,采用注册Panorama的SelectionChanged事件,然后根据SelectedIndex以及相应的Selected页面是否读取过得bool型标记来决定是否走相应的getlist函数,手机使用的问题就解决,正如昨天预想的,规避我所碰到的问题的方式很容易找到,不是问题。不过为什么针对这个问题的具体原因我还没找到,继续寻找。
现在界面如下:
用图标勾和叉来代表审核通过和审核退回。增加了一个刷新图标
摘自 往事如锋
补充:移动开发 , Windows Phone ,