您当前的位置: 首页 >  c#

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

c#:winform中多线程的使用

寒冰屋 发布时间:2019-12-24 20:38:05 ,浏览量:0

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

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

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

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

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

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

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

效果如下

 

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

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

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

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

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0481s