c#:winform中多线程的使用

最近由于在做一些demo之类的小测试,所以winform程序用的多了点。但是在使用的过程中发现在winform中对多线程的应用的相关知识变得模糊,所以就多看了相关知识点并整理测试了部分,记录相关内容,算是笔记,也方便以后的查阅。

其实我主要就打算记录两个点

第一个是关于大量任务下窗体的等待效果,或者说人机交互的友好性。关于这一点,我在网上也搜了相关的资料,但是发现都写的大同小异。所以本文以一个例子为基础,整理出一个弹框进度条提示的效果案例。同时我个人觉得这个案例的扩展和代码简洁性相对较好。

废话不多说,直接撸代码。

如下图所示的,是一个“主”窗体。这个窗体中定义了代理、进度条窗体实例等内容,当然也有执行任务的按钮事件。

几点说明。如图中箭头1部分,原案例中是单独定义了一个方法(箭头4部分)作为代理的参数,但是其实这个方法只是实现了进度条窗口的实例化及显示,所以我觉得用匿名方法就可以了。箭头2部分,这里其实就是业务逻辑的实现地方,只不过现在用了Thread.Sleep(100)代替了。箭头3部分,主要是给进度条传递当前进度,并且传递需要的提示信息。

下图是具体的进度条窗体中的代码,非常的简单,可以直接ctrl+cctrl+v的。当然返回的结果可根据业务需要进行调整。

效果如下

 

第二个是关于在多线程中对主线程控件进行操作的问题。

Winform中的多线程使用,一个不小心就会遇到“线程间操作无效: 从不是创建控件的线程访问它”这样的提示。我想大家都是有体会的。

传统方式是定义一个代理,然后写方法处理,而且这个方法里还要做判断。相对来说,代码还是比较多的,主要是写的地方多(这是得有多大的强迫症啊~)。这种写法度娘上一搜一大片,这里就不多说了。我想介绍的如下图所示的“最简单写法”。如果有多个地方使用就单放一个方法里面调用,如果只有一个地方,直接写就行。

当然了,多线程的知识绝不只是这么一点,我只是记录了一些典型的,我会忘记的点而已。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值