我的回收站
技术文章、随笔、文摘及其它
posts - 124, comments - 856, trackbacks - 1, articles - 1
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
列车时刻表 开发回顾 (一):后台线程更新前端界面
Posted on 2005-06-21 16:04
被遗弃的小指
阅读(2952)
评论(6)
编辑
收藏
列车时刻表在这里指前几日开发的
PPC版列车时刻表
和
SmartPhone版列车时刻表
在移动设备上,由于设备性能的关系,往往在PC上的一个操作在设备上所需要花费的时间将会大很多。例如,同样的数据量(大约4.8万条记录),在PC上,做一个Select使用SQL Server所花时间不到1秒钟,而在设备上就会慢的很多。
在前一版本的列车时刻表中,都是把结果查询出来之后,然后在根据结果来更新界面。结果导致界面响应太慢,甚至像是死机了一样。
后来,在MSDN上看到这样一篇文章,
Microsoft .NET Framework 精简版多线程提示
,受益匪浅。遂在新版本的列车时刻表将查询都更改为使用后台数据查询然后通过界面上的控件Invoke的方式来处理,结果速度得到了大幅度的提高。
代码示例如下:
代码片断1(后台用于按照列车车次名称查询的代码):
public
sealed
class
AsyncSearchByTrain:IAsyncSearch
{
private
string
_TrainName;
public
string
TrainName
{
get
{
return
_TrainName;
}
set
{
_TrainName
=
value;
}
}
public
event
PopupSearchByTrainEventHandler PopupResultOfTrain;
public
event
SearchOverEventHandler SearchOver;
IAsyncSearch 成员
#region
IAsyncSearch 成员
public
void
Search()
{
int
i
=
0
;
if
(
this
.PopupResultOfTrain
!=
null
)
{
string
text1
=
"
select
. where TrainName='
"
+
TrainName
+
"
';
"
;
SQLiteCommand command1
=
new
SQLiteCommand(text1, Database.conn);
IDataReader reader1
=
command1.ExecuteReader();
while
(reader1.Read())
{
//
组织查询到的某一条记录然后将其抛出
this
.PopupResultOfTrain(sbtra);
i
++
;
}
reader1.Close();
}
if
(
this
.SearchOver
!=
null
)
this
.SearchOver(i);
}
#endregion
}
我们可以看到,在里面我放了两个事件,一个用于抛出查到的某一条记录,另外一个用于通知界面上已经查询完毕。
代码片断二(用于提交查询的地方):
Core.AsyncSearchByTrain asbt
=
new
BreakString.TrainsInfo.Core.AsyncSearchByTrain();
asbt.TrainName
=
this
._TrainName ;
Thread searchThread
=
new
Thread(
new
ThreadStart(asbt.Search));
asbt.SearchOver
+=
new
BreakString.TrainsInfo.Core.SearchOverEventHandler(SearchOver);
asbt.PopupResultOfTrain
+=
new
PopupSearchByTrainEventHandler(PopupResultOfTrain);
searchThread.Start();
在查询的时候,使用一个线程来查询。
代码片断三(事件处理):
public
void
UpdateList(
object
sender, EventArgs e)
{
this
.TrainList.Items.Add(
new
ListViewItem(
new
string
[]
{
this
._ts.Sequence.ToString(),
this
._ts.Name,
this
._ts.ArriveTime,
this
._ts.LeaveTime,
this
._ts.TripTime,
this
._ts.Distance.ToString() }
));
//
将本地变量中的数据显示到列表中去
this
.TrainList.Update();
}
private
void
PopupResultOfTrain(SearchByTrainResultArgs searchByTrainResultArgs)
{
this
._ts
=
searchByTrainResultArgs.TrainStation;
//
将事件抛出的参数存放到一个本地变量中
this
.TrainList.Invoke(
new
EventHandler(UpdateList));
//
然后调用本地控件的Invoke方法来更新数据
}
private
void
SearchOver(
int
count)
{
if
(count
==
0
)
{
//
如果没有结果的话。。。。
}
else
{
//
如果有结果的话
..
}
}
通过这样处理,我们的查询线程在后台查找数据将结果反馈到界面上来,改善了用户的操作。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
Feedback
#1楼
回复
引用
2005-06-21 18:48
by
bbbb010
very good 拜读大作 受益非浅
#2楼
回复
引用
2005-06-21 19:04
by
flyman
呵呵。果然不錯。。。
#3楼
回复
引用
2005-06-22 10:49
by
小鲁
顶
呜呜 什么时候教教我啊
#4楼
回复
引用
2005-07-10 18:40
by
QW[未注册用户]
PPC版无法使用,一查询就出现以下错误然后死机:
“一个托管的Typeloadexception 发生在AsynchByTrain:search
确定将终止”
我用的PDA是N10.
#5楼
[
楼主
]
回复
引用
查看
2005-07-10 19:27
by
twodays
请确保您的PDA的存储卡的路径名不包含中文字符
#6楼
回复
引用
2008-04-29 07:29
by
火车时刻[未注册用户]
径名不包含中文字符
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
伊朗封杀Gmail和Facebook等互联网服务
·
分析称专利之争让谷歌苹果两败俱伤
·
Android平台发现新型手机病毒Rootsmart
·
HTC首款Android4.0手机大曝光
·
这是不是你期待的 iPad 3?
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
Powered by:
博客园
Copyright © 被遗弃的小指
日历
<
2005年6月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
公告
欢迎各位前往WPMind以获取Windows Phone最新开发技术和资讯信息!
我的MVP配置(Mobile Devices)
爱好
Windows Mobile开发
的朋友可以选择下列QQ群加入和大家进行讨论:
QQ群:
27961100
如果您只是Windows Mobile系统的玩家则请自行寻找其他Mobile应用相关QQ群,谢绝加入。
This work is licensed under a
Creative Commons Attribution-NonCommercial-ShareAlike 2.5 China License
.
昵称:
被遗弃的小指
园龄:
7年7个月
荣誉:
推荐博客
粉丝:
39
关注:
0
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
更多链接
我的标签
Windows Phone 7(10)
WPMind(10)
活动(7)
WP7(7)
MS(2)
Marketplace(2)
Mango(2)
Windows Phone 7 Series(2)
Silverlight(2)
Mobile Dev Day(2)
更多
随笔分类
.NET技术(21)
Mobile业界信息(25)
Windows Mobile 团队Blog公告(31)
列车时刻表(13)
其他微软相关(7)
随便写点(9)
移动应用开发(71)
随笔档案
2011年7月 (1)
2011年6月 (2)
2011年5月 (4)
2011年1月 (1)
2010年12月 (2)
2010年10月 (3)
2010年9月 (1)
2010年8月 (3)
2010年7月 (2)
2010年6月 (7)
2010年5月 (5)
2010年4月 (2)
2010年3月 (1)
2009年12月 (1)
2008年12月 (1)
2008年2月 (1)
2008年1月 (1)
2007年12月 (2)
2007年11月 (4)
2007年10月 (8)
2007年9月 (1)
2007年7月 (2)
2007年5月 (3)
2007年3月 (2)
2007年2月 (2)
2007年1月 (4)
2006年12月 (1)
2006年9月 (2)
2006年8月 (1)
2006年7月 (1)
2006年6月 (3)
2006年5月 (4)
2006年4月 (5)
2006年3月 (2)
2005年12月 (1)
2005年11月 (2)
2005年10月 (3)
2005年9月 (2)
2005年8月 (3)
2005年7月 (12)
2005年6月 (6)
2005年4月 (1)
2005年2月 (4)
2004年11月 (1)
2004年7月 (3)
2004年6月 (2)
=_=
Xreader小说集合器
魏群
我的回收站 @ Live.com
技术天地
C# FAQ
CSDN
MSDN中文站
UMLChina
UML软件工程组织
微软中国社区精华文章
中国系统分析员
走过路过不要错过
Anders Liu的Blog
Lucky Ma的Blog
黎波的Blog
马宁的Blog
积分与排名
积分 - 181680
排名 - 472
阅读排行榜
评论排行榜
推荐排行榜