欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

WP7多线程处理碰到的问题

程序员文章站 2022-06-21 15:51:52
之前做过一个公司的oa的财务审核流的wp7版。()之前代码结构有些紊乱,后来oa框架做了调整。前段开发方便了很多,重整针对wp7的财务审核流捋了一下。 采用panorama 模板搭建的项目来实现页面...

之前做过一个公司的oa的财务审核流的wp7版。()之前代码结构有些紊乱,后来oa框架做了调整。前段开发方便了很多,重整针对wp7的财务审核流捋了一下。
采用panorama 模板搭建的项目来实现页面效果,代码没有多少复杂。
审核分几类,每一类采用listbox来获取数据。数据获取最开始是一股脑直接按照顺序去执行读取函数,结果发现读取数据经常读取不到,调试的时候常会出现超时的现象。于是改成了多线程的方式来处理。
new system.threading.thread(() =>
            {
                system.windows.deployment.current.dispatcher.begininvoke(() =>
                {
                    getsalary();
                });
            }).start();

 
每一类数据的获取都采用这个方式处理。
现在发现了一个比较奇怪的现象,采用模拟题或者真机调试,没有一点问题。显示如下:

  WP7多线程处理碰到的问题

 

但是,如果把真实手机上使用这个xap,在登录系统后跳转到这个界面后,需要将手机锁屏后,再解锁屏幕,数据才能刷出来。之后退出系统(不是关闭系统,是退回到系统的登陆界面)登陆其他人的账号,这时候不用重复上面的操作,就可以读出正确的数据信息

现在还没有找到具体的原因,只能猜测:

1.代码正确,但是代码对应的效率达不到真机的机器要求,这个比较胡扯

2.针对真机实际操作,代码需要增加一些额外的刷新操作,因为我觉得在解锁时,手机进入程序的时候重新读取了页面的状态;事实上我在写到这里的时候,我突然想到:如果按一下win键,然后再点击退回键重新进入页面会怎样呢?我试了一下,发现效果和锁屏后解锁一样。这似乎给我灌输了这样一个认识:我写的代码的确是获取了正确的数据,但是这段代码在手机上运行时,没有绑定到对应的listbox控件上,需要一个类似刷新或者rebind的操作?

3.更换代码处理方式,确实有不少其他的处理方式可以选择。再做尝试,然后补充此文档。

 

补充
2012年4月6日:昨天晚上回去换成家里的wifi,首次登陆,数据正常显示。之后再登陆,就变成之前在公司测试的效果了,要重新恢复到这个页面才显示数据。这是个什么道理?

2012年4月6日9:50 之前做了一些调整,不适用thread,采用注册panorama的selectionchanged事件,然后根据selectedindex以及相应的selected页面是否读取过得bool型标记来决定是否走相应的getlist函数,手机使用的问题就解决,正如昨天预想的,规避我所碰到的问题的方式很容易找到,不是问题。不过为什么针对这个问题的具体原因我还没找到,继续寻找。

现在界面如下:

  WP7多线程处理碰到的问题


 

用图标勾和叉来代表审核通过和审核退回。增加了一个刷新图标

 

摘自  往事如锋