import{_ as d,c as h,e as l,a as i,d as e,w as n,b as a,r as p,o as k}from"./app-DlzW8FTI.js";const g={},c={class:"hint-container details"},A={class:"table-of-contents"};function m(u,s){const r=p("Mermaid"),t=p("router-link"),o=p("RouteLink");return k(),h("div",null,[s[19]||(s[19]=l(`

事件

事件是相应 ClassIsland 生命周期变化和课表状态改变的重要方式。

.NET 通用主机和 ClassIsland 提供了一系列的事件,您可以通过调取对应的服务等方式订阅这些事件。

注意

如果您在组件中订阅组件以外的服务的事件,请务必在组件卸载(Unload 事件触发)时取消订阅这些事件,否则组件可能不会被 GC 回收,造成内存泄露。下面的代码可以添加到组件的构造函数中,以实现在加载时订阅相关事件,并在卸载时自动取消订阅。

Loaded += (_, _) => LessonsService.PostMainTimerTicked += LessonsServiceOnPostMainTimerTicked;
Unloaded += (_, _) => LessonsService.PostMainTimerTicked -= LessonsServiceOnPostMainTimerTicked;

生命周期

`,5)),i("details",c,[s[0]||(s[0]=i("summary",null,"生命周期事件示意图",-1)),s[1]||(s[1]=i("p",null,"以下是 ClassIsland 的生命周期及事件触发的示意图:",-1)),e(r,{id:"mermaid-23",code:"eJxLy8kvT85ILCpRCHHhUgCC4BIgp7RAI1rp6a4pz6eseDph/dOuFUqxmmBZXV07Bef8vLTM9NKiVI/84pJopZetvc/3rnvZMAuo+MmO3c/m7FKKhav1zMssyUzMyaxKDcgpTc/MKwYa2zH36fLupz3TnvVPerJ72/s9HRApp8TiVD2E+vd7OpHMAVkFdVm0EsQWmMPganwSS/OSM3wTM/N88vOByiAKgIqf7lv1vG89kkrHggKwYakp1dVKCI5SbS1cSUBRKsikkMzc1KKQzORsoEJ0IXQN+cmpxcU+QJwP9uaSlucT2l6s3/diIbIjA4AewTAYXQy/U7jAMhia4OpdK4BhmJcOi8Bnaxc/nbPiZUPD03bkmAF7O7+gAKgSFggQHshqAMv/1GA="})]),i("nav",A,[i("ul",null,[i("li",null,[e(t,{to:"#生命周期"},{default:n(()=>s[2]||(s[2]=[a("生命周期")])),_:1})]),i("li",null,[e(t,{to:"#应用生命周期事件"},{default:n(()=>s[3]||(s[3]=[a("应用生命周期事件")])),_:1}),i("ul",null,[i("li",null,[e(t,{to:"#应用启动完成-appstarted"},{default:n(()=>s[4]||(s[4]=[a("应用启动完成 AppStarted")])),_:1})]),i("li",null,[e(t,{to:"#应用正在停止-appstopping"},{default:n(()=>s[5]||(s[5]=[a("应用正在停止 AppStopping")])),_:1})])])]),i("li",null,[e(t,{to:"#主计时器事件"},{default:n(()=>s[6]||(s[6]=[a("主计时器事件")])),_:1}),i("ul",null,[i("li",null,[e(t,{to:"#课表处理前事件"},{default:n(()=>s[7]||(s[7]=[a("课表处理前事件")])),_:1})]),i("li",null,[e(t,{to:"#课表处理后事件"},{default:n(()=>s[8]||(s[8]=[a("课表处理后事件")])),_:1})])])]),i("li",null,[e(t,{to:"#课表事件"},{default:n(()=>s[9]||(s[9]=[a("课表事件")])),_:1}),i("ul",null,[i("li",null,[e(t,{to:"#上课事件"},{default:n(()=>s[10]||(s[10]=[a("上课事件")])),_:1})]),i("li",null,[e(t,{to:"#下课事件"},{default:n(()=>s[11]||(s[11]=[a("下课事件")])),_:1})]),i("li",null,[e(t,{to:"#放学事件"},{default:n(()=>s[12]||(s[12]=[a("放学事件")])),_:1})]),i("li",null,[e(t,{to:"#时间状态改变事件"},{default:n(()=>s[13]||(s[13]=[a("时间状态改变事件")])),_:1})])])])])]),s[20]||(s[20]=l(`

应用生命周期事件

这些事件会在应用生命周期发生改变时触发。要订阅这些事件,需要通过以下代码获取当前应用的实例:

var app = AppBase.Current;

// 注册应用启动完成事件
app.AppStarted += (o, e) => Console.WriteLine("AppStarted");

应用启动完成 AppStarted

在应用启动完成之后触发。

事件名: AppStarted

参数:

应用正在停止 AppStopping

在应用正在退出时触发。

注意

不要在此事件的事件处理器上进行异步操作。

事件名: AppStopping

参数:

主计时器事件

`,13)),i("p",null,[s[15]||(s[15]=a("这些事件会每隔 50ms 触发一次,适用于进行轮询操作。要订阅这些事件,需要按照")),e(o,{to:"/dev/basics/dependency-injection.html"},{default:n(()=>s[14]||(s[14]=[a("基础知识")])),_:1}),s[16]||(s[16]=a("文档中关于依赖注入的文档获取 ")),s[17]||(s[17]=i("code",null,"ClassIsland.Core.Abstractions.Services.ILessonsService",-1)),s[18]||(s[18]=a(" 服务。"))]),s[21]||(s[21]=l('

课表处理前事件

在主计时器开始处理课表信息前触发。

服务: ClassIsland.Core.Abstractions.Services.ILessonsService

事件名: PreMainTimerTicked

参数:

课表处理后事件

在主计时器完成处理课表信息后触发。

服务: ClassIsland.Core.Abstractions.Services.ILessonsService

事件名: PostMainTimerTicked

参数:

课表事件

以下事件会在课表的对应状态触发。

上课事件

当进入上课类型的时间点时触发。

服务: ClassIsland.Core.Abstractions.Services.ILessonsService

事件名: OnClass

参数:

下课事件

当进入课间休息类型的时间点时触发。

服务: ClassIsland.Core.Abstractions.Services.ILessonsService

事件名: OnBreakingTime

参数:

放学事件

当放学(当前时间超出今天的时间表的最后一个时间点)时触发。

服务: ClassIsland.Core.Abstractions.Services.ILessonsService

事件名: OnAfterSchool

参数:

时间状态改变事件

当当前时间状态改变时触发。

服务: ClassIsland.Core.Abstractions.Services.ILessonsService

事件名: CurrentTimeStateChanged

参数:

',32))])}const y=d(g,[["render",m]]),C=JSON.parse('{"path":"/dev/events.html","title":"事件","lang":"zh-CN","frontmatter":{"description":"事件 事件是相应 ClassIsland 生命周期变化和课表状态改变的重要方式。 .NET 通用主机和 ClassIsland 提供了一系列的事件,您可以通过调取对应的服务等方式订阅这些事件。 注意 如果您在组件中订阅组件以外的服务的事件,请务必在组件卸载(Unload 事件触发)时取消订阅这些事件,否则组件可能不会被 GC 回收,造成内存泄露。下面的...","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"事件\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2025-12-14T02:59:03.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"ClassIsland 社区\\",\\"url\\":\\"https://classisland.tech\\"}]}"],["meta",{"property":"og:url","content":"https://docs.classisland.tech/dev/events.html"}],["meta",{"property":"og:site_name","content":"ClassIsland 文档"}],["meta",{"property":"og:title","content":"事件"}],["meta",{"property":"og:description","content":"事件 事件是相应 ClassIsland 生命周期变化和课表状态改变的重要方式。 .NET 通用主机和 ClassIsland 提供了一系列的事件,您可以通过调取对应的服务等方式订阅这些事件。 注意 如果您在组件中订阅组件以外的服务的事件,请务必在组件卸载(Unload 事件触发)时取消订阅这些事件,否则组件可能不会被 GC 回收,造成内存泄露。下面的..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2025-12-14T02:59:03.000Z"}],["meta",{"property":"article:modified_time","content":"2025-12-14T02:59:03.000Z"}],["link",{"rel":"alternate","hreflang":"en-us","href":"https://docs.classisland.tech/en-us/dev/events.html"}]]},"git":{"createdTime":1719066151000,"updatedTime":1765681143000,"contributors":[{"name":"WRC","username":"WRC","email":"hello_wrc@outlook.com","commits":6,"url":"https://github.com/WRC"},{"name":"LiuYan-xwx","username":"LiuYan-xwx","email":"66517348+LiuYan-xwx@users.noreply.github.com","commits":2,"url":"https://github.com/LiuYan-xwx"}]},"readingTime":{"minutes":2.31,"words":694},"filePathRelative":"dev/events.md","autoDesc":true}');export{y as comp,C as data};