最近在开发一个即时消息系统,由于时间比较忙,加上还有4,5门的考试,没有时间写点感受,现在准备慢慢抽点时间写,要不然我的登峰之道要成凉亭了:),言归正传,客户端需要转文件给服务器,实质是传给另一个客户端,不过可能目标客户不在,所以通过服务器中转,当然留言的功能也是如此实现的。传输文件不止是一个,可能包含N个目录和N个文件,通常要把传输的文件目录列表放到一个循环里,依次向TCP流写入,当然包括文件的大小和文件名,在这种情况下如果上个文件还没有传输完毕,For循环里的一下文件是不能写入TCP流的,如何解决这个问题? 我的思路是在for循环里放入AutoResetEvent,产生一个等待事件,直到上个文件传输完毕后,把AutoResetEvent设成非激活,以使for继续执行传输下一个文件,这里我没有给你TCP的示例,而且是给出这个问题的模型。请看下面的示例代码
using System;
using System.Threading;
namespace AutoResetEvent_Examples
{
class MyMainClass
{
const int numIterations = 10;
static AutoResetEvent myResetEvent = new AutoResetEvent(false);
static int number;
static void Main()
{
Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc));
myReaderThread.Name = "ReaderThread";
myReaderThread.Start();
}
static void MyReadThreadProc()
{
for(int i=0;i<numIterations;i++)
{
Console.WriteLine("Writer thread writing value: {0}", i);
number = i;
ProFile();
myResetEvent.WaitOne();
}
}
static void ProFile()
{
Console.WriteLine("static process sendfile:"+number);
Console.WriteLine("process end!");
myResetEvent.Set();
}
}
}