科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

  • 评论
  • 分享微博
  • 分享邮件
框架设计

  为了实现刚才讨论的行为,明显需要实现一个Controller类。为了使这种框架有广泛的用途,我们定义了一些Controller与UI(或客户端)和工作线程交互时使用的形式接口(formal interface)。

  通过为客户端和工作线程定义形式接口,我们能在不同的环境、不同的UI需求和不同的Worker对象中根据需要使用同一个的Controller对象。

  下面的UML类图显示了Controller类、IClient和Iworker接口。它也显示了Icontroller接口,任何的工作代码都能使用该接口与Controller对象交互。


      图5:Controller和相关接口的类图

  IClient接口定义了一些方法,这些方法能被Controller对象调用,在Worker开始或完成时通知客户界面,并将任何中间状态消息通知客户界面。它也包含一个显示工作代码错误的方法。

  通常情况下我们利用Controller对象产生并由UI控制的事件来实现这些功能。可是,没有简单的办法使工作线程产生一个事件并被UI线程适当地控制,因此,我们用一系列方法来实现它们。

  我们很容易使Controller代码运行在工作线程上,调用UI中的方法,这样使UI线程就拥有它的句柄。

  同样,IWorker接口定义的方法将被Controller对象调用来与工作代码交互。当Start方法用于启动处理后台线程时,Initialize方法为工作代码提供一个指向Controller对象的指针。

  线程的工作方式使Start方法不能有任何参数。当开始一个新线程时,我们必须给该线程传递一个方法的地址,该方法不能接受参数。

  再次,注意没有把Cancel或Stop方法作为IWorker接口的一部分。由于我们不能强迫工作代码停止,因此没有必要;作为代替,工作代码能使用IController接口询问Controller对象是否有“取消”请求。

  IController接口定义了Controller对象的方法,这些方法能被工作代码能调用。它允许工作代码检查Running标志,如果有“取消”请求,该标志为False。它也允许工作代码在完成或者失败时告诉Controller,用状态消息和完成百分比值(从0到100的整数)更新Controller。

  最后我们定义Controller对象本身。它有一些能被UI代码调用的方法。其中包括Start,该方法通过给Controller对象提供一个Worker对象的指针启动后台处理。它也包含Cancel方法,用于请求一个“取消”操作。UI也能检查Running属性,看是否有“取消”请求,Percent属性用于显示事务完成的百分比。

  Controller类包含constructor方法,接受IClient作为参数,允许UI给Controller提供一个指向窗体的指针,该窗体将实现从Worker收到的所有消息的显示。

  为了实现动态点显示活动,我们将建立一个简单的Windows窗体控件,使用计时器改变一组PictureBox控件的颜色。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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