日期:2014-05-19  浏览次数:20762 次

开5个线程和SOCKET分别负责下载5个不同的文件
我说的是一个线程负责一个文件的下载!!!!
Private   void   ReceiveCallback()
{
        ..........
.......
.......
......//这些就是下载的代码
          BeginReceive(.............................(ReceiveCallback));//循环接收
}
主要就是这段代码在下载数据,可是再前面的FOR循环会不断的开5个线程,当5个线程运行到这里一起下载5个文件时?会发生什么情况?(我的实际情况是:如果每个文件小的应该没问题,因为他运行一次接收下载就下载完了,相当与是一个文件下完后再下一个文件就没问题,但是当一个文件大的时候,一个线程不断在这循环接收下载,又一个要下的文件也运行到这里,我的程序就停了)
到底是为何?

------解决方案--------------------
// Use the enumeration flags to indicate that this method exposes
// synchronization and external threading.
[HostProtectionAttribute(Synchronization=true, ExternalThreading=true)]
private static void StartThread()
{
Thread t = new Thread(new ThreadStart(WatchFileEvents));

// Start the new thread. On a uniprocessor, the thread is not given
// any processor time until the main thread yields the processor.
t.Start();

// Give the new thread a chance to execute.
Thread.Sleep(1000);
}


------解决方案--------------------
http://sourceforge.net/projects/filescope/
http://sourceforge.net/projects/eant
------解决方案--------------------
而且还用的异步多线程,似乎不好控制,学习,楼下说
------解决方案--------------------
做线程之间的同步,当一个线程下载一个文件时,加上锁,等下载结束释放锁
------解决方案--------------------
像这样可控的的情况下,用线程加同步Socket吧,好控制一点!
不要用异步!
------解决方案--------------------
既然是5个线程。那么开启5个线程。然后写一个方法是专门用来接收的方法。 这个方法要在其中一个线程连接成功后用异步来调用。这样完全能够避免数据的冲突问题。
不知道我这么想有没有问题。
------解决方案--------------------
帮顶3下
------解决方案--------------------
帮顶3下
------解决方案--------------------
帮顶3下
------解决方案--------------------
帮顶