WinForm事件遇到异步方法的处理方式

我们在WinForm开发的过程中,如果我们遇到异步的需求是无法直接处理的,因为WinForm的大部分事件其实是同步事件,他没有完善的机制去等待异步的响应(当然部分事件除外,比如shown);在这种情况我们可以通过Task.Run(...)方法来实现

c 复制代码
Task.Run(() => GetComputerInfoTable());
periodicService = new PeriodicService();
Task.Run(() => periodicService.StartAsync());

类似这样的代码块它可以以一种模拟同步的情况来执行异步,在这个方法里面() => GetComputerInfoTable():这是一个lambda表达式,它定义了一个匿名方法,该方法在调用时执行GetComputerInfoTable方法。Lambda表达式() =>表示一个没有参数的方法。如果你需要传递参数,你可以在括号内指定它们。GetComputerInfoTable()是要异步执行的方法的调用。采用这种方法他同步会返回一个task对象,那么对于这个事件来说整体是同步的,他无需等待异步的响应,但是异步的线程队列又不会被杀死,仍可正常执行;

这样我们就可以放入Load事件去执行一些异步线程,但是这种情况也只能适用于无需窗体UI响应的情况,因为这种情况实际上是跳过了异步的响应对象,如果对于UI的异步等待响应的话,则需要进一步的处理

相关推荐
愚者游世几秒前
template学习大纲
开发语言·c++·程序人生·面试·visual studio
阿里嘎多学长2 分钟前
2026-03-11 GitHub 热点项目精选
开发语言·程序员·github·代码托管
宵时待雨3 分钟前
C++笔记归纳10:继承
开发语言·数据结构·c++·笔记·算法
csbysj20204 分钟前
TypeScript String
开发语言
bugcome_com8 分钟前
C# 泛型(Generic)完全指南:从基础到高级应用
c#
小温冲冲9 分钟前
QML vs Qt Widgets:深度对比与选型实战指南
开发语言·c++·qt
smchaopiao11 分钟前
C++20概念(Concepts)入门指南
开发语言·c++·算法
挠头猴子22 分钟前
c++中常用的运算符优先级
java·开发语言·c++
我是唐青枫27 分钟前
C#.NET Memory 深入解析:跨异步边界的内存视图与高性能实战
开发语言·c#·.net
Yupureki29 分钟前
《C++实战项目-高并发内存池》5.PageCache构造
c语言·开发语言·c++·单例模式·github