不知道大家用过sina的点点通没有?请问它里面的下载内容是怎么实现的。
我现在模仿它作了个多线程下载的东西,用户点击下载--〉开一个新的下载线程---〉线程开始的时候--〉(用委托)异步变化tree的图标--〉开始下载数据并处理--〉下载完成有用委托异步变化tree的图标但是这个实现别人说有问题,就是说微软不推荐在线程中变化界面的东西。然后朋友给我一个方法就是不开多线程通过异步调用去下载数据,就是说用户点击“下载”按钮然后异步下载数据,最后用回调委托变化tree的图标。这么做是可以解决线程变化图标的问题。但是这么做有个操作是没办法处理的,就是“全部下载”,比如用户设置机器最多可以3个线程同时下载,而点击“全部跟新”按钮有10个要下载的,那么自然另外的7个要进入队列中,这样不用线程就没办法处理请大家给个思路。。
还有一个就是我现在很大的问题,我用线呈变化tree的图标,当开3个以上线呈以后变化图标的时候,tree明显感觉有个闪烁的过程
谢谢大家了。。
我现在模仿它作了个多线程下载的东西,用户点击下载--〉开一个新的下载线程---〉线程开始的时候--〉(用委托)异步变化tree的图标--〉开始下载数据并处理--〉下载完成有用委托异步变化tree的图标但是这个实现别人说有问题,就是说微软不推荐在线程中变化界面的东西。然后朋友给我一个方法就是不开多线程通过异步调用去下载数据,就是说用户点击“下载”按钮然后异步下载数据,最后用回调委托变化tree的图标。这么做是可以解决线程变化图标的问题。但是这么做有个操作是没办法处理的,就是“全部下载”,比如用户设置机器最多可以3个线程同时下载,而点击“全部跟新”按钮有10个要下载的,那么自然另外的7个要进入队列中,这样不用线程就没办法处理请大家给个思路。。
还有一个就是我现在很大的问题,我用线呈变化tree的图标,当开3个以上线呈以后变化图标的时候,tree明显感觉有个闪烁的过程
谢谢大家了。。
system.net.sockets.socket
提供的下载类有很多,msdn中有例子!
delegate void DownloadComplete( DownloadEventArgs e );
class Download{
public event DownloadComplete DownloadEventHandler;
private Thread _thread;
..初始化数据
public void StartDownload()
{
开始下载数据,起始线程
_thread.Start();
}
private void DownloadData()
{
//此方法执行下载,下载完成后,引发下载完成事件,并传下载数据
}
}在Form中:
Download dl = new Download();
dl.DownloadComplete += ....注册事件
private void 处理事件,更改UI信息以上只是伪代码,大概就是这个意思,将线程的初始化放在CLASS中
那么程序开始下载其中3个目录,还有7个目录要存在对列中等待更新,当3个目录中其中一个下载完成,等待的对列中就自动加一个去下载。而我还需要更改这个新加上的目录在界面上的一些相关的元素。
我的做法是:当程序遇到下载操作的时候,启动一个新的线程类(线程类是自己封装的),把界面上目录的node存到线程类中,然后在线程中通过委托回调(也就是事件)的方法更改node的imageinex...(也就是更该界面的元素)
(备注:我已经封装了一个线程类,里面注册了一些相关事件)现在的问题:就是说微软不推荐在线程中变化界面的东西。
我想换个实现的方法,。把原来通过线呈的方法---〉改为异步调用来实现。。具体应该怎么做了?
但是你这样修改界面的元素一定要用invoke.
:),他用的事件,我用的委托。。一样