讲述关于VB.NET事件处理程序

开发 后端
文章主要对VB.NET事件处理程序的问题进行讲解,对文件系统监控 、创建Windows服务两方面具体的分析和详细的代码解析。

VB.NET经过长时间的发展,很多用户都很了解它了,这里我就VB.NET事件处理程序发表一下个人理解,和大家讨论讨论。

文件系统监控

我曾经遇到过一些应用程序,需要等待和处理某个特定目录中的文件-例如,将数据从文件导入到数据库中去的应用程序。数据文件可以从某个大型机上下载,或者被转移到某个输入目录中,该应用程序将它们导入到数据库中。你不用经常地轮询该目录检查是否有新文件,可以等待生成新文件的通知。你可以在Visual Basic 6.0中使用Win32 API来做到这一点,而在Visual Basic .NET中你可以使用.NET Framework类来做这项工作。但是在.NET中实施文件监控与在.NET中完成其他工作的方法更加一致,因此学习曲线是最小的。

你可以使用System.IO.FileSystemWatcher .NET类对文件系统进行监视。它提供了一些属性,允许你设置监控的路径,指定是对文件还是子目录层次的变化感兴趣。System.IO.FileSystemWatcher还允许你指定需要监控的文件名和文件类型(例如,*.xml是指监控所有XML文件的变化)。最后,你可以指定感兴趣的变化类型-例如,只对新建文件,文件属性的变化或文件大小的变化感兴趣。
在你设置了监控内容后,你需要钩住用于感兴趣的各种事件的VB.NET事件处理程序。FileSystemWatcher事件有Changed、Created、Deleted、Error和Renamed。要处理某个事件,首先你需要编写一个与FileSystemEventHandler代理相同声明的VB.NET事件处理程序,然后将这个处理程序添加到FileSystemWatcher类中。这个基于代理的体系结构允许你为同一个事件添加多个处理程序,或者对于多个事件使用同一个处理程序-而你不能使用Visual Basic 6.0做到这一点。

  1. 注释:System.IO contains the   
  2. 注释:file monitoring classes and types  
  3. Imports System.IO  
  4. Module   
  5. Module1  
  6. Sub Main()   
  7. 注释:FileSystemWatcher does the real work  
  8. Dim fw As New FileSystemWatcher()   
  9. 注释:WaitForChangedResult is what you    
  10. 注释:get back when a change occurs   
  11. Dim result As WaitForChangedResult   
  12. 注释:set the path to monitor   
  13. fw.Path = "C:WINNT"   
  14. 注释:tell it whether to watch files or directories  
  15. fw.Target = WatcherTarget.File   
  16. 注释:tell it whether to include subdirs   
  17. fw.IncludeSubdirectories = False   
  18. 注释:hook up handlers AddHandler fw.Created,New FileSystemEventHandler(AddressOf OnFileNotify)注释:enable the watcher   
  19. fw.Enabled = True DoConsole.WriteLine("Beginning to monitor")   
  20. 注释:this is where we actually wait  
  21. 注释:waiting blocks execution for the specified timeoutresult = fw.WaitForChanged(WatcherChangeTypes.All, 60000)Console.WriteLine("Hit Enter to continue q to quit")   
  22. Loop While (Console.ReadLine <> "q")End Sub  
  23. 注释:This is the delegate that gets   
  24. 注释:called when a file is created   
  25. Public Sub OnFileNotify(ByVal source As Object, ByVal e As FileSystemEventArgs)Console.WriteLine( "Notification received for file , change type is ", _e.FullPath, e.ChangeType) End SubEnd Module  

你可以创建一个FileSystemWatcher,然后设置它的属性。你可以使用AddHandler将FileSystemEventHandler代理与各种FileSystemWatcher事件关联起来,如Created。然后你就可以启用FileSystemWatcher,然后调用WaitForChanged。该调用将在变化发生或达到指定的超时时返回。

创建Windows服务

当你要创建一个Windows服务时,你必须使用Visual C++或在Visual Basic中使用srvany.exe或第三方工具来创建该服务。任何一种方法,你都没有在Visual Basic中编写自己的服务,你只是正在Visual Basic运行时的外部添加更多从属组件。 如果你使用C++或C语言,在不使用活动模版库(Active Template Library)的情况下从头编写一个Windows服务,你将不得不编写一小段代码来协调你的服务与服务控制器(Service Control Manager,SCM)之间的往来通信,SCM用来处理服务的启动、暂停、继续和停止。.NET Framework通过提供System.ServiceProcess.ServiceBase类,使得实现一个服务变得很容易。要编写一个服务,你可以从这个类继承,重载它的某些方法,设置它的属性,然后就大功告成了!

你可能要重载的一些方法包括:OnStart、OnStop、OnPause和OnContinue。通常你需要载启动工作线程(worker thread)的位置重载OnStart,在需要取消这个工作线程的位置重载OnStop。在你创建了自己的服务后,你就可以使用SCM安装和注册这个服务。这是另一个领域,.NET Framework中的基类提供了大部分所需的工作。你可以创建一个继承自System.Configuration.Install.Installer的类,从System.ServiceProcess.ServiceInstaller中例示对象,然后设置它的属性,如服务启动模式和服务名称。这使得.NET安装实用工具installUtil.exe能够安装(和删除)你的服务,而你无需编写额外的代码。

当你开始使用Visual Studio .NET时,你将会发现Visual Studio .NET使得使用.NET Framework变得更容易。Visual Studio .NET允许你创建Windows服务(拥有安装程序(installer)),监控文件系统的变化,写入事件记录 - 所有都是使用设计器和组件而不是编写代码来完成。例如,要将一个安装程序添加到自己的服务项目中,你只需选中服务设计器避免,然后单击属性(Properties)窗口底部的添加安装程序(Add Installer)。这将添加一个新模块ProjectInstaller.vb,该模块包括安装该服务所需的全部代码。你可以使用设计器,对安装选项,如启动模式进行自定义。

结论

.NET Framework使得你能够利用Visual Basic .NET,很容易地开发健壮地VB.NET事件处理程序。它使得你可以将重点放在学习一种相容的程序设计模型上,并且使得你可以直接访问底层的.NET平台。利用Visual Basic .NET和.NET Framework,你可以使自己的应用程序达到前所未有的水平。

【编辑推荐】

  1. 实例讲述VB.NET使用Log4Net
  2. 三分钟学会VB.NET转换形态
  3. VB.NET获取硬盘信息四大法宝
  4. 讲述VB.NET调用Excel的好处
  5. 简单例子概述VB.NET新窗体
责任编辑:田树 来源: 博客
相关推荐

2009-10-16 13:26:53

VB.NET Exce

2009-10-14 17:08:44

VB.NET使用Fil

2009-11-03 17:31:01

VB.NET窗体

2009-10-21 10:45:50

VB.NET Quic

2009-10-13 17:03:55

VB.NET面向对象

2009-10-12 16:39:59

OracleTransVB.NET使用

2009-11-02 15:45:03

VB.NET IEnu

2009-10-16 09:35:24

VB.NET制作透明窗

2009-10-19 08:55:22

VB.NET多重继承

2009-10-15 11:11:08

VB.NET Text

2009-10-23 13:22:25

VB.NET实现拖动图

2009-10-14 11:15:06

VB.NET Grou

2009-10-10 16:44:52

VB.NET开发控件

2009-10-15 16:39:00

VB.NET读取INI

2010-01-15 13:30:50

VB.NET Prog

2009-10-29 09:57:16

VB.NET实现数据绑

2009-10-22 09:20:46

VB.NET Proc

2009-10-21 18:28:48

VB.NET表间拖放

2009-10-26 18:11:47

VB.NET调用Exc

2010-01-14 17:33:47

VB.NET重载事件处
点赞
收藏

51CTO技术栈公众号