Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.

My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
        public void DownladAsync(string URL) {
            url = URL;

            try { File.Delete("test.flv"); } finally {}

            List<Thread> Threads = new List<Thread>();
            chunkOutput = new List<byte[]>();

            int totalChunks = 20;

            int start = 0;
            int end = 0;
            int fileSize = (int) ChunkDownloader.GetSize(URL);
            bool downloading = true;
            int i = 0;
            int lastpos = 0;
            bool endOfFile = false;

            while (!endOfFile) {
                Threads.Clear();
                chunkOutput.Clear();

                for (i = 0; i < totalChunks; i++) {
                    // run a thread and create empty slot for it
                    Thread chunkThread = new Thread(new ParameterizedThreadStart(DownloadSingleChunk));
                    Threads.Add(chunkThread);
                    chunkOutput.Add(new byte[0]);

                    // start and end position
                    start = lastpos + (i * chunkSize);
                    end = start + chunkSize;

                    // if does not have room for another chunk, stretch it until the end
                    if (start + (chunkSize * 2) > fileSize) {
                        //MessageBox.Show("THIS IS THE FINAL CHUNK");
                        chunkThread.Start(new object[] { i, start + 0, fileSize });
                        endOfFile = true;
                        break;
                    }

                    object[] parameters = null;
                    if (start == 0) 
                        parameters = new object[] { i, 0, chunkSize - 1};
                    else 
                        parameters = new object[] { i, start + 0, end - 1};

                    chunkThread.Start(parameters);
                }

                // wait for all chunks to finish
                foreach (Thread chunkThread in Threads) chunkThread.Join();

                lastpos += fromByteList(chunkOutput).Length; 
                ChunkDownloader.AppendData("test.flv", fromByteList(chunkOutput), fromByteList(chunkOutput).Length);
            }

            MessageBox.Show("Downloaded :)");

            foreach (Thread t in Threads) t.Interrupt();
        }