频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> Asp.Net教程 -> 在 Visual Basic .NET 中实现后台进程(三)

在 Visual Basic .NET 中实现后台进程(三)

作者:未知  来源:转载  发布时间:2005-7-20 10:02:34  发布人:acx

减小字体 增大字体


创建显示的窗体

最后,我们可以创建窗体,将其用于启动或取消后台进程。该窗体还将显示活动和状态信息。

打开 Form1 的设计器并添加两个按钮(btnStartbtnRequestCancel)、两个标签(Label1Label2)、一个 ProgressBar (ProgressBar1) 和一个 ActivityBar (ActivityBar1),如图 7 所示。

screen.width-600)this.style.width=screen.width-600;">

图 7:Form1 控件的布局

该窗体需要实现 IClient,以便 Controller 对象与之交互:

Imports Background

Public Class Form1
  Inherits System.Windows.Forms.Form

  Implements IClient

该窗体还需要 Controller 对象和一个标志,用以跟踪后台操作是处于活动状态还是处于完成状态。

  Private mController As New Controller(Me)
  Private mActive As Boolean

然后,我们可以添加方法,以实现由 IClient 定义的接口。建议将这些方法放在 Region 中,以表示它们实现的是辅助接口:

#Region " IClient "

  Private Sub TaskStarted(ByVal Controller As Controller) _
      Implements IClient.Start

    mActive = True
    Label1.Text = "Starting"
    Label2.Text = "0%"
    ProgressBar1.Value = 0
    ActivityBar1.Start()

  End Sub

  Private Sub TaskStatus(ByVal Text As String) _
      Implements IClient.Display

    Label1.Text = Text
    Label2.Text = CStr(mController.Percent) & "%"
    ProgressBar1.Value = mController.Percent

  End Sub

  Private Sub TaskFailed(ByVal e As Exception) _
      Implements IClient.Failed

    ActivityBar1.Stop()
    Label1.Text = e.Message
    MsgBox(e.ToString)
    mActive = False

  End Sub

  Private Sub TaskCompleted(ByVal Cancelled As Boolean) _
      Implements IClient.Completed

    Label1.Text = "Completed"
    Label2.Text = CStr(mController.Percent) & "%"
    ProgressBar1.Value = mController.Percent
    ActivityBar1.Stop()
    mActive = False

  End Sub

#End Region

请注意,这一段代码中的所有内容均与线程无关,其中的每一部分代码都可以在我们得知后台操作的状态时做出相应的响应。每次响应后,我们都会更新显示以表明进程的状态和完成百分比(以文字的形式或通过 ProgressBar 显示),并启动和停止 ActivityBar 控件。

mActive 标志非常重要。如果用户在辅助线程处于活动状态时关闭窗体,应用程序可能会挂起或变得不稳定。要防止出现这种情况,我们可以打断窗体的 Closing 事件并取消关闭尝试(如果后台进程处于活动状态)。

  Private Sub Form1_Closing(ByVal sender As Object, _
    ByVal e As System.ComponentModel.CancelEventArgs) _
    Handles MyBase.Closing

    e.Cancel = mActive

  End Sub

我们还可以选择在这种情况下初始化取消操作,但是这取决于特定的应用程序要求。

其余的代码都是为了实现按钮的 Click 事件。

  Private Sub btnStart_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles btnStart.Click

    mController.Start(New Worker(2000000, 100))

  End Sub

  Private Sub btnStop_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles btnStop.Click

    Label1.Text = "Cancelling ..."
    mController.Cancel()

  End Sub

Start(开始)按钮只调用 Controller 对象的 Start 方法,并将 Worker 对象的实例传递给它。

您可能需要调整用于初始化 Worker 对象的值,以便在您的计算机上获得所需的结果。这些特定的值提供了双处理器 P3/450 计算机上的一个良好示例。显然,这只是用于测试目的。真正的 Worker 对象将实现更有意义、运行时间更长的进程。

Cancel(取消)按钮将调用 Controller 对象的 Cancel 方法,同时还会更新显示,以表明已请求取消。请记住,这只是一个取消“请求”,在辅助线程真正停止运行之前可能需要等待一些时间。最好能够为用户提供即时反馈,至少应让用户知道系统已经注意到用户的单击按钮操作。

现在,我们可以运行应用程序了。单击 Start(开始)按钮时,Worker 就应该开始运行,而且显示的内容会在运行时更新。您可以将窗体移动到屏幕上的任意位置,也可以与其交互,因为 UI 线程本质上还处于空闲状态,可以随时与您交互。

同时,辅助线程在后台进行大量复杂的工作,并定期将状态更新信息发送给 UI 线程以进行显示。

小结

多线程是一个功能强大的工具,我们可以在每次需要执行长时间运行的任务时使用该工具。我们可以用它运行辅助代码,而无需绑定用户界面。但同时要注意,多线程操作非常复杂,要正确操作并不容易,而且调试起来也比较困难。

尽管不一定能够实现,但我们还是应该尽量为每个辅助线程提供一组它可以操作的独立数据。要达到这个目的,最简单的方法就是为每个线程创建一个对象,对象中包含该线程可以操作的数据以及完成工作所需的代码。

通过实现结构化的架构,使之充当辅助线程和 UI 线程之间的媒介,我们可以大大简化编写多线程代码和 UI 以对其进行控制的过程。本文就介绍了这样一个架构,您可以根据需要使用或进行调整,以满足特定的应用需要。

<-- END TOTAL PAGE CONTENT -->

将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
下一篇文章:VB.NET多线程开发实例
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· 转换字符串带有http://的..
· ASP+页缓存OutputCache ..
· 使用PHP模拟HTTP认证
· 关于将数据成批导入新数..
· 查看服务器Application/..
· 来!把我的Blog数据转移..
· JSP语法(9)——<jsp:g..
· 使用w3Sockets组件实现域..
· 如何制作无状态的ASP组件..
· 关于Fscommand的使用教程..
· Photoshop色彩调整:色彩..
· Xhtml第6天:XHTML代码规..
· sql2000卸载了后重新安装..
· 安徽修订管理条例 网吧接..
· 用Socket发送电子邮件--..
· 马化腾入选《时代》百名..
相关文章
· 图书专家程三国炮轰Google妨..
· 简介动画制作过程及业..
· 在 Visual Basic .NET 和 V..
· 在 Visual Basic .NET创建控..
· 在 Visual Basic .NE..
· 在 Visual Basic .NE..
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号