打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用ApplicationContext的类完全封装闪屏功能
作为开发人员,我们总是试图把一些清凉??在我们的应用程序的功能。我们不能帮助它,我们的性质。如果不是,三是会计或市场营销工作。添加一点点的凉意?我们的WinForm应用程序的方法之一是添加闪屏应用程序启动时,几秒钟弹出。
我不会给一个创建闪屏形式的hows的教程。有一百万和一个如何做到这一点的文章。 IM去走了过来,是一种清洁的方式封装到了一个辅助类的闪屏功能。我们将使用一类所谓的ApplicationContext类,从它继承和投入,我们的闪屏逻辑。这样一来,你没有投入到您的主要或飞溅形式的任何特殊代码,以使他们的工作。事实上,一旦你实现自定义的ApplicationContext类,你可以使用任何你想要的形式,它变成一个闪屏。应用背景:它有什么作用?
进出口会花一些时间了,详细的ApplicationContext。这将使它更容易理解,我们继承的类是什么做幕后。如果你不真正关心的ApplicationContext做的事情,只是跳到节全部放在一起??
那么在ApplicationContext做呢?太多真的,这是什么使得它很容易将其配置为我们的需求。每一个WinForms应用程序有一个ApplicationContext类的一个实例,你可能不知道它。让我们看看在一个标准的main()函数的WinForms application.static无效的主要(){   ; Application.Run(新Form1的());}
IM确保youve见过此之前。但是你知道,你也可以写这样吗?静态无效的主要(){   ; ApplicationContext的appCtx =新的ApplicationContext(新Form1的()); Application.Run(appCtx);}
他们真的是同一个。在第一种情况,Application.Run功能只是创建一个新的ApplicationContext实例,并传递到其构造形式的对象。在第二种情况下,我们做这一切手动。因此,现在只记得每一个WinForm应用程序有一个ApplicationContext实例,它拥有一个实例Form对象,将作为我们的主要形式。
的ApplicationContext的目的是作为一个应用程序的启动和终止通知链接在您的应用程序和UI线程之间的主要形式。 UI线程是主线程,应用程序的用户界面是运行,它是处理应用程序的消息循环的工作马。消息循环接收事件消息,从操作系统像鼠标右键??或空间栏按钮向下??和需要处理的形式,发送这些消息。
消息循环内的ThreadContext类,这是一个私人的子类内的应用程序类中定义。很少有ThreadContext内部文件,但你可以使用的Anikrino工具里面偷看。
因此,让我们回到主要功能。 Application.Run是从main()调用时,它调用反过来ThreadContext.RunMessageLoop,在新创建的ApplicationContext实例,其中包含一个实例的应用程序的主要形式传递。 RunMessageLoop然后注册ApplicationContexts ExitThread事件ThreadContexts回调函数OnAppThreadExit。这将让消息循环得到通知,当用户关闭应用程序的主要形式(即患病不久谈论有关)。 RunMessageLoop然后设置的主要表现形式的Visible属性为true,这是一点,用户终于看到的主要形式。的最后一件事RunMessageLoop进入实际的消息循环,这样就可以开始接收和处理来自操作系统的事件消息。
的ApplicationContext类只有一个属性,这就是所谓的MainForm。在主函数中的代码示例中,我们走过去,到ApplicationContexts构造通过窗体的实例,我们会设置MainForm的属性。 set_MainForm财产登记ApplicationContext.OnMainFormDestroy回调函数形式通过HandleDestroyed事件,这将被调用,当用户关闭窗体。通过这种方式,ApplicationContext会时得到通知的应用程序的主形式不断得到破坏。
这个回调是非常重要的,因为在WinForms应用程序,形式是不是应用程序,他们只是对象Application对象持有。如果应用程序对象没有得到通知时被破坏的主要形式,它会继续运行消息循环不休。所以,当用户关闭的主要形式,形式调用它的HandleDestroyed事件,它调用ApplicationContexts OnMainFormDestroy的回调函数。然后调用这个回调ThreadContexts ExitThread事件,它调用ThreadContexts OnAppThreadExit的回调函数。调用此函数告诉ThreadContext和应用程序的主要形式已被摧毁,它是确定以终止该UI线程。资讯科技职位的应用程序退出操作系统,这将导致应用程序来清理它需要的任何资源和终止UI线程。全部放在一起,以创建一个闪屏
这可能比你想知道会发生什么事,当主函数调用Application.Run。但我想它去,这样你会明白正是我们正在做什么是要在下一节。
微软并没有公开的ApplicationContext类供我们使用,但他们所做的,所以我们可以从它继承和定制这个启动过程。和多数民众赞成刚才什么事情做,一个定制的ApplicationContext和持有两种形式,一个闪屏的形式和应用的主要形式。
首先创建一个WinForms项目,并添加第二个窗体称为Splash.cs。下一页到您的项目添加一个新类,并调用它SplashAppContext。你想要做的第一件事是让这个类从ApplicationContext的继承:公共类SplashAppContext:ApplicationContext中{ 。 。 。
我们还需要一个类型的表格和另一种类型的定时器的私有字段:表的MainForm = NULL;定时器splashTimer =新的Timer();
接下来,创建一个SplashAppContext构造函数。此构造将有两个输入属性,两种类型的表格。第一个是你的闪屏的形式,第二个是你的主要的申请表格:公共SplashAppContext(MainForm的表格,表格splashForm):基础(splashForm){ 0; this.mainForm = MainForm的; splashTimer.Tick =新的EventHandler(SplashTimeUp); splashTimer.Interval = 2000; splashTimer.Enabled =;}
一定要调用基构造和闪屏窗体的实例,通过。这将导致基地的ApplicationContext闪屏形式存储在它的MainForm属性。构造函数然后将其存储在其私人领域的主要应用形式,并设置定时器的默认值。 Timer对象,默认情况下,将等待两秒钟,然后调用SplashTimeUp回调function.private无效SplashTimeUp(对象发件人,EventArgs的发送){ splashTimer.Enabled =; splashTimer.Dispose(); base.MainForm.Close();}
被调用SplashTimeUp时,两秒钟的延迟后,第一次作主关闭计时器对象,然后关闭该基地ApplicationContexts的主要形式。这将导致初始屏幕关闭本身。记住ApplicationContexts的MainForm属性被设置时,它会注册ApplicationContexts OnMainFormClosed与形式的回调函数HandleDestroyed事件?那么,当我们调用base.MainForm.Close(),这将触发启动画面HandleDestroyed事件,调用OnMainFormClosed功能:保护覆盖无效OnMainFormClosed(对象发件人,EventArgs的发送){ 如果(发件人是飞溅)   ;{ base.MainForm = this.mainForm; &# 160; base.MainForm.Show(); } 否则,如果(发件人是Form1) { base.OnMainFormClosed(发件人,E); }}
在回调函数中,我们首先要检查,看看是否封闭形式,发送对象,是闪屏。如果是的话,我们更换启动画面的形式存储在与应用程序的主窗体实例的base.MainForm属性。还记得我刚才说的设置这个属性没有吗?寄存器与形式OnMainFormClosed HandleDestroyed的活动。所以现在,我们促成复位的MainForm属性,当用户关闭的主要应用形式,OnMainFormClosed将得到所谓的第二次。
这一次,我们检查的封闭形式,看它是否是主要的申请表格。如果是的话,我们呼吁base.OnMainFormClosed,这将调用ThreadExit事件,进而调用ThreadContexts OnAppThreadExit的回调函数,清理所有的资源,并终止在UI线程。
我还添加了一个公共属性这一类揭露闪屏计时器,如果你想改变默认闪屏delay.public INT SecondsSplashShown { 设置 { splashTimer.Interval =值* 1000; }}
现在,我们有这个类,使用它是很容易的。首先,创建一个SplashAppContext实例,并在第一个参数,并作为第二个参数的初始屏幕形式在主应用程序的形式传递。然后,只需调用Application.Run,??通过在新的实例SplashAppContext.static无效的主要(){ SplashAppContext splashContext = 新SplashAppContext(新Form1的(),新的泼水节()); Application.Run(splashContext);}
当ApplicationContext被传递给ThreadContext.RunMessageLoop,该函数将设置Visible属性为true的闪屏,闪屏用户。两秒钟后,计时器调用其回调函数关闭闪屏。这将触发OnMainFormClosed功能,被称为交换ApplicationContext.MainForm财产的主要应用形式的闪屏形式,然后显示给用户的主要形式。这是所有的代码,你需要把你的应用程序的主要功能。闪屏功能,并不需要任何代码,其所有在自定义的ApplicationContext。结论
我比较喜欢这个模型,因为它封装了所有的闪屏逻辑远离形式。形式只是坐在那里,看起来很漂亮,没有别的。有了这个模型,你可以在任何两种形式传递到SplashAppContext构造和他们的工作。
你也可以采取这个类,就可以扩大到一个冷却器??闪屏,更多的花里胡哨之一。我创建了从ApplicationContext的继承,第二类称为SplashFadeAppContext,让您配置启动画面淡入,淡出,两者或两者都不是。这个类是在同一CS SplashAppContext类的文件,只是它下面。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#(WinForm)实现控件键盘消息处理详解(转载)
delphi中关于tapplication类的详解
C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
基于.Net平台应用程序唯一运行实例实现
Delphi 中控制 Word,xml,dll 等操作
Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服