Blazor 系列教程 - Blazor WebAssembly中创建子线程

787 阅读2分钟

目的:

在工程中创立子线程能帮助轻松的实现很多功能,例如定时功能、状态监控功能等。

Blazor server工程支持创建Thread线程,但是Blazor WebAssembly工程不支持,不过好在可以利用Task异步的方式创建。

本文将给出在Blazor WebAssembly工程中创建一个用作程序运行状态监控的子线程;

代码:

image.png

该示例中使用Task在根布局组件的OnAfterRenderAsync函数重载中创建,不会阻塞主线程,相当于每隔一毫秒会执行一次cycleFunc()函数,该函数内将写有各种监控逻辑,如示例中的计时更新逻辑就是用于一个计时页面计算时间用的,可做到每执行一次就刷新目标计时组件,达到持续计时不卡住的目的。

注意:

!Task异步任务(线程)必须写在OnAfterRenderAsync函数重载中,且必须是异步,如上图所示。

!必须使用InvokeAsync包一层;

原因和组件生命周期有关,也没有其他的写法,背下来直接用就好了。有兴趣的可以深究一下原理;

将子线程封装进控件组件的尝试

这种在组件中创建线程的时候,尽量不要调用局部变了。

曾经试过在一个弹框组件内常见线程来实现3秒控制计数,参与计算的有记录弹框显示时间的DateTime局部变量,但是导致了组件卡死。

尝试将局部变量改为用其他位置(如静态类)的变量后问题解决。

但是因为无法做到绝对的模块化,所以最后还是把该逻辑从控件组件内部搬到了总的子线程中,做统一管理;