科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual Basic .NET实现后台处理(上)

Visual Basic .NET实现后台处理(上)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

多线程使应用程序具有在同一时刻处理多个事务的能力。使用多线程,可以一个线程运行用户界面,同时另一个线程在后台做复杂的计算或处理。

作者:陶刚编译 来源:yesky 2007年10月15日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
线程和对象

  创建在自己的线程上使用自己的数据运行的后台处理的最简单的方法是为该后台处理建立一个对象。虽然这不一定可行,但却是一个好的目标,因为它从根本上简化了多线程应用程序。

  如果后台线程在自己的对象中运行,它可以使用该对象的实例变量(在类中声明的变量),而不需担心它们被其它的线程使用了。例如,考虑下面的类:

Public Class Worker
 Private mInner As Integer
 Private mOuter As Integer
 Public Sub New(ByVal InnerSize As Integer, ByVal OuterSize As Integer)
  mInner = InnerSize
  mOuter = OuterSize
 End Sub

 Public Sub Work()
  Dim innerIndex As Integer
  Dim outerIndex As Integer
  Dim value As Double
  For outerIndex = 0 To mOuter
   For innerIndex = 0 To mInner ' do some cool calculation here
    value = Math.Sqrt(CDbl(innerIndex - outerIndex))
   Next
  Next
 End Sub
End Class

  该类设计用于运行后台线程,能使用下面的代码来执行它:

Dim myWorker As New Worker(10000000, 10)
Dim backThread As New Thread(AddressOf myWorker.Work)
backThread.Start()

  Worker类有用于存放数据的实例变量。这些变量(mInner和mOuter),可以被后台线程安全地使用,并可以断言它们不会在同一时刻被其它线程访问。

  我们可以使用constructor方法来初始化该对象。在后台线程被载入前,主应用程序代码建立该对象的一个实例,并用后台线程操作的数据来初始化。

  将该对象的Work方法的地址给后台线程后,它才被载入。该线程将使用对象中给定的数据运行的代码。

  由于该对象是自我包含(self-contained)的,我们能建立多个对象,每一个在它们自己的线程上运行并且彼此隔离。

  这种实现并不理想。UI没有办法知道后台处理的状态。我们也没有执行任何机制使得UI可以查询到后台处理已经终止了。

  所有这些情况都需要后台线程以某种方式与UI线程交互。这种交互很复杂,因此如果我们能用某种方式抽象化这种交互,将它们放入一个类中将会很有利,这样UI和工作代码都不需要担心细节。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章