Winform异步界面调用设计

在超长时间调用时,如果采用同步调用,因为窗口的Windows消息循环被阻塞,会造成界面出现假死或卡死的状态。

为了避免窗口出现假死状态,通常采用异步调用,利用定时器周期性的泵入消息到主窗口,提示操作执行的进度。同时为了优雅的取消长时间的操作,需要提供对应的异步操作取消操作处理。主窗口中应该可以同时发起多个异步操作,相互之间互不干涉。

基于以上的处理需求,编写了异步处理调用窗口基类。

每一个具体的调用,通过匿名委托拆分成两部分,异步调用处理部分和同步界面显示部分,对应的调用引用,统一送入上下文处理调用接口,构建完毕异步调用上下文之后,被系统抛入线程池,同时放入同步上下文链表中。抛入线程池的调用构造,被重新分发给独立的消息处理线程,每一个消息处理线程,与异步调用上下文关联,可以利用异步调用上下文,破坏消息处理线程对应的线程栈,达到异步操作取消的目的。正常的处理消息,在消息处理线程被处理,本质上是调用的函数引用,处理完毕之后,通过同步处理上下文,将处理完毕的结果抛回UI线程,包括正常处理结果或异步处理结果,UI线程负责加载显示处理完毕的结果。

最后由调度类,释放消息处理线程,界面等待显示窗口,定时器等。

整个调度的序列图,如下,Demo下载地址:http://download.csdn.net/detail/gongbenwen/9627785



异步调用效果图:




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值