为了账号安全,请及时绑定邮箱和手机立即绑定

新手请教,关于异步处理的程序

新手请教,关于异步处理的程序

狐的传说 2018-10-10 01:02:28
最近在编写一个程序,主要实现了从多个Ftp站点自动下载数据,程序结构如下:Private void btnStartClicked(){       For()       {              //代码多,不一一表示了,主要是对每个站进行遍历,实现每个站数据的下载              //其中调用了下面这个函数,这个函数实现单个站的数据下载。              downSingleSite(string [] siteInfo);}} Private void downSingleSite(string [] siteInfo){/*这个函数先根据提供的站点控制信息访问网络,获取下载文件的信息,并按条件进行筛选,获取需要下载的文件信息并存入fileInfoList中。Foreach(string singleFile in fileInfoList){       启动一个线程执行数据下载功能;}//如果有10个文件需要下载,那么就启动了10个线程进行下载。       While()   //用于对这几个线程执行是否完成进行判断.       {              如果没完成Thread.sleep(3000);}}在以上程序中,我的程序能正常下载数据,但是由于在窗口服务线程中执行了这一数据下载过程,在这一服务未完成之前,其他窗口消息无法得到响应因此,当单击窗口界面是,出现程序无响应的显示,,而我在程序中使用了sleep()是程序睡眠,但仍然没有效果,不知是何原因。请各位高手不吝赐教,我该如何改变我的程序结构,请稍微详细一点,我刚入门,知识还比较欠缺。
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

用 BackgroundWorker 控件。具体可见 MSDN。

查看完整回答
反对 回复 2018-10-22
?
当年话下

TA贡献1890条经验 获得超9个赞

判断是否完成的While循环是在窗体的主线程中运行的,窗口当然会失去响应了。可以再启动一个线程执行判断。或用用 BackgroundWorker 控件

查看完整回答
反对 回复 2018-10-22
  • 2 回答
  • 0 关注
  • 386 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信