注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 微软开发专栏 > VB.NET 内容正文:用VB2005构建反应灵敏的应用程序

用VB2005构建反应灵敏的应用程序

发布时间:2006-03-10 20:38:54 来源:友佳学院 网友评论 0 条
前言

   Visual Basic .NET中最突出的特色之一就是构造多线程应用程序。但由于多线程应用程序天然的复杂性及挑战性,使许多VB开发人员没有充分利用这一新提供的功能。

   在了解Visual Basic 2005创建多线程应用程序是多么容易以前,让我们看一看通常程序开发人员所遇到的挑战:长时间运行的任务在执行过程中经常限制了用户的输入或使用户无法与操作系统进行交互。

  一、长时间运行的任务实例

   在这个实例中,我们将对一个规定的整数计算斐波纳契数列(每个数等与数列前两个数之和)。也许这个例子对开发人员开发应用程序来说用处不大,但它的确是一个非常合适的例子,它不需要开发人员具备数据库或是其他一些必须得知识。你想象的应用程序中的长时间运行的任务类型可能是耗时的数据库操作、遗传系统调用、外部服务调用或是其他的一些深层次的资源操作。

   为了创建这个项目,首先创建一个窗体应用程序,它带有一个进度条、两个按钮、一个数字输入框和一个显示结果的标签。两个按钮分别命名为startSyncButton 和cancelSyncButton,将标签的text属性设置为no result。对窗体上的各个控件进行仔细布局调整以后,界面效果如下:


图一、创建一个新的窗体应用程序


   在这个窗体中添加以下代码计算斐波纳契数列。

Function ComputeFibonacci(ByVal n As Integer) As Long
  ’ The parameter n must be >= 0 and <= 91.
  ’ Fib(n), with n > 91, overflows a long.
  If n < 0 OrElse n > 91 Then
   Throw New ArgumentException( "value must be >= 0 and <= 91", "n")
  End If
  Dim result As Long = 0
  If n < 2 Then
   result = 1
  Else
   result = ComputeFibonacci(n - 1) + ComputeFibonacci(n - 2)
  End If
  ’ Report progress as a percentage of the total task.
  Dim percentComplete As Integer = CSng(n) / CSng(numberToCompute) * 100
  If percentComplete > highestPercentageReached Then
   highestPercentageReached = percentComplete
   Me.ProgressBar1.Value = percentComplete
  End If
  Return result
End Function

   这段代码非常直观,它通过递归调用来计算结果。尽管在小数情况下这段代码将执行的非常快,但随着你输入的数字的增大,代码的执行时间迅速增加。

   每执行代码时,这个函数将更新一次屏幕上的进度条,以提醒用户当前程序进度及应用程序正在运行。

   现在我们将在开始按钮后面添加一小段代码来运行这个函数。

Private Sub startSyncButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles startSyncButton.Click
  ’ Reset the text in the result label.
  result.Text = [String].Empty
  ’ Disable the UpDown control until
  ’ the synchronous operation is done.
  Me.numericUpDown1.Enabled = False
  ’ Disable the Start button until
  ’ the synchronous operation is done.
  Me.startSyncButton.Enabled = False
  ’ Enable the Cancel button while
  ’ the synchronous operation runs.
  Me.cancelSyncButton.Enabled = True
  ’ Get the value from the UpDown control and store it
  ’ in the globle variable numberToCompute.
  numberToCompute = CInt(numericUpDown1.Value)
  ’ Reset the variable for percentage tracking.
  highestPercentageReached = 0
  ’ Start the synchronous operation.
  result.Text = ComputeFibonacci(numberToCompute).ToString
  ’ Enable the UpDown control.
  Me.numericUpDown1.Enabled = True
  ’ Enable the Start button.
  startSyncButton.Enabled = True
  ’ Disable the Cancel button.
  cancelSyncButton.Enabled = False
End Sub

   正如其他应用程序一样,这里没有什么特别之处,当用户点击开始按钮后,程序开始计算并将结果现在是屏幕上,但是,这个程序有一个非常明显的错误。

   当按下按钮后,主线程既要对来自于用户界面的操做进行反应,又要忙于计算斐波纳契数列值。如果你开始这个应用程序并输入一个大的数字,例如50,你将看到你的应用程序将给用户带来的窘境。点击Start按钮后,试着将应用程序最小化或移动程序窗口,这时应用程序将没有任何反应或反应非常迟钝。


图二、即使函数在运行,但程序对用户操做没有任何反应
   除了反应迟钝或根本没有任何反应外,没有别的方法来让用户取消进程。如果用户错误地输入了一个大的数字并且其不愿意继续等待,那么他该怎么做呢?

   为了说明这一点,在Cancel按钮后添加如下代码:

Private Sub cancelSyncButton_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles cancelSyncButton.Click
  MsgBox("Cancel")
End Sub


   这段非常简单的代码将显示一个消息框,表明我们已申请了取消操作,如果你在程序运行时输入另外一个较大的数字,那么当你点击取消按纽时程序将没有任何反应,尽管程序在运转。

   最好的解决上述问题的办法是将需要长时间运行的任务放入另外一个线程之内,这将让我们的主线程接受用户操作并让应用程序及时做出相应的反应。

相关文章
  • 让Visual Basic应用程序支持鼠标滚轮
  • VB6如何在托盘中写入应用程序图标
  • 在Linux操作系统中如何截获系统调用
  • JSP/Servlet应用程序优化八法
【评论】【收藏本文】【打印】【关闭】
上一篇文章:VB中利用第三方控件实现软件在线升级
下一篇文章:Visual Basic编程映射/中断网络磁盘
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • 在Visual Studio 2005中实现VB重构
  • 在VB 2005中定制自己的异常
  • 如何编写高质量的VB代码
  • WPS Office 2005常见问题解答
  • Visual Basic中文本框处理技巧集萃
  • VB.NET使用OracleTransaction处理事务
  • Visual Basic创建“五星”级
  • VB编程控制Windows中文输入法
  • VBScript教程 第四课 VBScript变量
  • VB图像处理之二次线性插值的应用
阅读排行
  • 1.通过实例学VB—创建简单的个人通讯录
  • 2.如何编写高质量的VB代码
  • 3.在VB的ListView控件中动态加载记录
  • 4.用VB备份和恢复SQL Server数据库的方法
  • 5.利用VB学做“黑客”程序
  • 6.掌握VB中的ADO数据对象编程
  • 7.将程序加入启动组
  • 8.VB程序中用ADO对象动态创建数据库和表
  • 9.VB与Excel2000实现复杂报表打印
  • 10.六天学会Visual Basic数据库编程
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载