还记得BackgroundWorker吗?

本文通过一个进度条提示的场景,介绍了如何使用BackgroundWorker组件进行后台异步操作,并详细讲解了BackgroundWorker的WorkerReportsProgress、WorkerSupportsCancellation、DoWork、ProgressChanged和RunWorkerCompleted事件的用法,帮助读者回忆和理解这个组件在多线程中的应用。
摘要由CSDN通过智能技术生成

今天一早醒来,猛然发现,很久没写博客了,算一算,其实应该不到一个月,可总觉得寰宇一个月,世上已千年。是啊,于是内心萌发了一股冲动的力量,今天该写点什么,可是,一时想不出来。

打开电脑,突然想起来,昨天下午,有位仁兄和我讨论过一个事,不妨拿来说说。

她说她的牛逼程序要处理一堆东东,要弄个进度条作提示,不过进度条是在另一个窗口中的,她的想法是,在开始处理数据时弹出进度对话框,实时显示处理进度,当处理完成后关闭对话框。乍看起来其实不难,不过她遇到了以下问题,故在群里提问。

1、模态对话框的问题。

这问题好办,一般来说,要长时间来处理数据,应该考虑后台异步操作,用砖家的话讲就是多线程。不过她在显示窗口时调用了ShowDialog方法,这样代码会一直停在那里,直到窗口关闭。

如果是异步操作,通常来说,在启动后台任务后会马上返回,这么一来,只要把代码的顺序调一下就可以解决这问题,先启动后台任务,再调用ShowDialog方法,这样一来,就算代码停在ShowDialog那里也不会影响后台任务的执行

2、如何控制其他窗口中控件。

可以在在窗口类中定义公共方法来对控件进行某些操作,之后在其他地方就可以通过这些公共方法来调控。如果是跨线程调用,应当考虑使用委托或事件来调用。不然你学了委托和事件干吗呢?

另一种方法就是直接把进度窗口中的ProgressBar控件声明为public,这样其他类就可以轻松访问了。

3、后台任务如何更简单。

方法是灵活的,有很多种。最简单的是利用.NET 4.5和C# 5.0 中的新特性,这种方法肯定是最简单的。第二种则是使用.NET 4 中新加的Task类来调度线程;比较传统,在2.0时代用得最多的方法是直接用Thread类。

但是,有一个组件是专为后台任务而开放的,忘了没有?——BackgroundWorker,也许有些朋友

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值