资源大全 | 神秘文化 | 在线翻译 | QQ专区 | 视频教程 | 彩信频道 | 搜索引擎 | BT下载 |  | 网站地图
设为首页
加入收藏
联系站长
您现在的位置: 一百网络 >> 其他编程 >> Delphi编程 >> 文档正文
最近更新
普通文档 Together与Visual.Studi
普通文档 Together与Visual.Studi
普通文档 Together与Visual.Studi
普通文档 Delphi实现在数据库中存
普通文档 Delphi开发多媒体播放音
普通文档 开发工具大比拼之Visual
普通文档 Delphi串口通讯的监听
普通文档 Delphi中远程控制的实现
普通文档 利用Delphi编写Socket通
普通文档 利用Delphi开发网络数据
推荐文章
  • 此栏目下没有推荐文档
  • 用VB2005构建反应灵敏的应用程序(1)

    文章作者:佚名 录入时间:2006-6-2 来源:不详
    网站声明:本站的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出处和原始作者,文章版权归本网站与文章作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。


      

    前言

       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


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

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

  • 上一篇文档:

  • 下一篇文档:
  •     查找更多“用VB2005构建反应灵敏的应用程序(1)”的内容  
    相关连接
  • 将Java程序变成Windows系统服务

  • 浅析Java多线程程序设计机制

  • Java初学者需掌握的30个基本概念(1)

  • JDBC 入门(1)

  • 面向Java程序员的Ajax:构建动态Java程序(1)