知识大全 使用.net下的系统事件增强应用程序

Posted 事件

篇首语:盛年不重来,一日难再晨,及时当勉励,岁月不待人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用.net下的系统事件增强应用程序相关的知识,希望对你有一定的参考价值。

  一般情况下 在开发应用程序的时候都很少考虑一些系统部分的变化对应用程序带来影响 比如系统字体库里的字体增加或减少 用户注销或系统关机 桌面主题变换等等 针对应用程序的不同 或多或少会造成一些影响 比如程序在运行过程中没有退出就被用户注销 有可能造成数据丢失 系统字体的更改或系统时钟的更改对程序造成界面显示上或处理上的影响 如果需要程序有一定的健壮性 就需要在这些事件发生时做一些处理 幸运的是为实现这些功能我们不需要自己写一些繁杂的代码 FCL提供了一个类Microsoft Win SystemEvents来很好的完成这项任务 在看大师Charles Petzold著的《Microsoft C# Windows 程序设计》的时候发现这个类 想必许多人都已经用过了 不过还是决定自己写一些代码来体验一下     打开 NET Framework SDK 文档 查看SystemEvents的信息 它作为一个类提供了一些静态事件 我新建一个Windows 项目对一些事件进行了测试     在窗体构造函数中注册一堆静态事件     public Form ()        InitializeComponent();    //当用户更改显示设置时发生     SystemEvents DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged);    //在侦听系统事件的线程终止前发生 将在事件线程上调用委托     SystemEvents EventsThreadShutdown += new EventHandler(SystemEvents_EventsThreadShutdown);    //当用户在系统中添加或移除字体时发生     SystemEvents InstalledFontsChanged += new EventHandler(SystemEvents_InstalledFontsChanged);    //当系统用完可用 RAM 时发生     SystemEvents LowMemory += new EventHandler(SystemEvents_LowMemory);    //当用户切换到使用其他调色板的应用程序时发生     SystemEvents PaletteChanged += new EventHandler(SystemEvents_PaletteChanged);    //当用户挂起或继续系统时发生     SystemEvents PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);    //当用户注销或关闭系统时发生     SystemEvents SessionEnded += new SessionEndedEventHandler(SystemEvents_SessionEnded);    //当用户试图注销或关闭系统时发生     SystemEvents SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);    //当用户更改系统时钟上的时间时发生     SystemEvents TimeChanged += new EventHandler(SystemEvents_TimeChanged);    //在窗口计时器间隔过期时发生     SystemEvents TimerElapsed += new TimerElapsedEventHandler(SystemEvents_TimerElapsed);    //在用户首选项更改后发生     SystemEvents UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);    //当用户首选项更改时发生     SystemEvents UserPreferenceChanging += new UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);        上面的代码很清楚也很简单 对其中几个事件处理程序的测试如下     private void SystemEvents_UserPreferenceChanging(object sender UserPreferenceChangingEventArgs e)        UserPreferenceCategory category = e Category;    MessageBox Show(category ToString());        UserPreferenceCategory是一个枚举类型 每一项值表示标识已更改的用户首选项区域 类型比较多 具体可以看MSDN文档 UserPreferenceChanged事件类似 使用UserPreferenceChangedEventArgs参数     下面是系统注销或关闭事件处理程序     private void SystemEvents_SessionEnding(object sender SessionEndingEventArgs e)        if(MessageBox Show(this 是否允许系统注销! 系统提示 MessageBoxButtons YesNo) != DialogResult Yes)        e Cancel = true;        else        e Cancel = false;        SessionEndReasons reason = e Reason;    switch(reason)        case SessionEndReasons Logoff:    MessageBox Show( 用户正在注销 操作系统继续运行 但启动此应用程序的用户正在注销 );    break;    case SessionEndReasons SystemShutdown:    MessageBox Show( 操作系统正在关闭 );    break;            如果把上面的事件处理程序修改成如下    private void SystemEvents_SessionEnding(object sender SessionEndingEventArgs e)        e Cancel = true;        那会出现什么情况 你点击开始菜单关机选择注销 关机 或重新启动将会失效 电脑不能正常关机了 进一步的话把程序做成Windows服务 人不知鬼不觉 晕 恶作剧?    SessionEnded事件同上 事件参数类为SessionEndedEventArgs 同SessionEndingEventArgs相比少了Cancel属性 Cancel属性同一些windows下的某些事件差不多 比如Form Closing事件 Control Validating事件     补充 如果需要获取应用程序需要的系统信息 可以访问System Windows Forms SystemInformation类 这也是一个很有用的类 它提供了一组静态属性 cha138/Article/program/Java/hx/201311/27060

相关参考

知识大全 开发ASP.NET下的MP3小偷程序

开发ASP.NET下的MP3小偷程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  MP资源都在

知识大全 使用Visual Basic.NET重载事件处理程序

使用VisualBasic.NET重载事件处理程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 .NET下的另类系统发布和自动更新

.NET下的另类系统发布和自动更新  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一背景  我在

知识大全 ASP.NET入门教程 10.3.3 事件处理程序/函数

ASP.NET入门教程10.3.3事件处理程序/函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 .NET 平台下的OutLook 开发技术

.NET平台下的OutLook开发技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在应用程序

知识大全 增强的Windows窗体为.Net程序丰富用户界面

增强的Windows窗体为.Net程序丰富用户界面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

高速产业化下的多宝鱼事件

它有裙边,胶原蛋白含量高,肉质鲜美,从2000年进入市场仅6年,就成为广东、上海等地海鲜的宠儿,养殖户5000家,年产量4万多吨,产值30多亿元,成为水产市场上的一个神话。自11月17日起,上海、广州

高速产业化下的多宝鱼事件

它有裙边,胶原蛋白含量高,肉质鲜美,从2000年进入市场仅6年,就成为广东、上海等地海鲜的宠儿,养殖户5000家,年产量4万多吨,产值30多亿元,成为水产市场上的一个神话。自11月17日起,上海、广州

知识大全 .Net 下跟踪线程挂起和程序死循环

.Net下跟踪线程挂起和程序死循环  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  下的程序调试相

知识大全 .NET应用程序的授权模型使系统更易管理

.NET应用程序的授权模型使系统更易管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  正确设计