コード例 #1
0
        static void MultiThreadsDown(Object tdata)
        {
            try
            {
                // Establish the remote endpoint for the socket.
                IPAddress ipAddress;
                IPAddress.TryParse(url_str, out ipAddress);
                IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
                // Create a TCP/IP socket.
                Socket client = new Socket(AddressFamily.InterNetwork,
                                           SocketType.Stream, ProtocolType.Tcp);
                // Connect to the remote endpoint.
                client.Connect(remoteEP);

                ThreadPara thdata = (ThreadPara)tdata;

                string httprequest;
                httprequest  = "GET /" + httpfile + " HTTP/1.1\r\n";
                httprequest += "Connection: close\r\n";
                httprequest += "Range: bytes=" + thdata.StartPos.ToString() + "-" + thdata.EndPos.ToString() + "\r\n";
                httprequest += "Host: 172.16.12.201\r\n";
                httprequest += "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\r\n\r\n";

                thdata.dataLen = thdata.EndPos - thdata.StartPos + 1;

                thdata.msFData.Seek(0, SeekOrigin.Begin);
                byte[] sendData = Encoding.ASCII.GetBytes(httprequest);
                client.Send(sendData, SocketFlags.None);
                byte[] receiveData = new byte[1024];
                Int32  recvLen     = client.Receive(receiveData, 1024, SocketFlags.None);
                thdata.msFData.Write(receiveData, 0, recvLen);
                while (recvLen > 0)
                {
                    recvLen = client.Receive(receiveData, 1024, SocketFlags.None);
                    thdata.msFData.Write(receiveData, 0, recvLen);
                }
                client.Shutdown(SocketShutdown.Both);
                client.Close();
                thdata.eventThreadDone.Set();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
コード例 #2
0
ファイル: CRepositoryControl.cs プロジェクト: nhnchengdu/nGit
        private void lvCommitsInfo_SelectedIndexChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (m_lvCommitsInfo.m_emOprType == CCommitsListView.OperationTyPe.MERGE
               ||m_lvCommitsInfo.m_emOprType == CCommitsListView.OperationTyPe.REBASE
               ||m_lvCommitsInfo.m_emOprType == CCommitsListView.OperationTyPe.COMPARE)
               return;

            if (e.IsSelected == true)
            {
                //
                if(e.ItemIndex!=m_lvCommitsInfo.m_nOldSelectedValue)
                {
                    m_lvCommitsInfo.m_nOldSelectedValue = e.ItemIndex;
                }
                else
                {
                    return;
                }

                m_tabInfo.SelectedIndex = 0;
                string szSHA = e.Item.Tag.ToString();
                //async local operation  //by fengzheng
                ThreadPara ThreadStringParm = new ThreadPara();
                ThreadStringParm.szParam = szSHA;
                ThreadStringParm.ThreadFunc = RefreshGUI_Tab_AsyncLocal;
                AysncRunLocalOperaWithStringPara(ThreadStringParm);

                //
                m_lvCommitsInfo.EnsureVisible(e.ItemIndex);
            }
        }
コード例 #3
0
        static void threadGETFile()
        {
            try
            {
                // Establish the remote endpoint for the socket.
                //IPAddress ipAddress = Dns.GetHostEntry(url_str).AddressList[0];
                IPAddress ipAddress;
                IPAddress.TryParse(url_str, out ipAddress);
                IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);
                // Create a TCP/IP socket.
                Socket client = new Socket(AddressFamily.InterNetwork,
                                           SocketType.Stream, ProtocolType.Tcp);
                // Connect to the remote endpoint.
                client.BeginConnect(remoteEP,
                                    new AsyncCallback(ConnectCallback), client);
                connectDone.WaitOne();
                // Send test data to the remote device.
                request  = "HEAD /" + httpfile + " HTTP/1.1\r\n";
                request += "Connection: close\r\n";
                request += "Range: bytes=0-\r\n";
                request += "Host: 172.16.12.201\r\n";
                request += "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\r\n\r\n";

                Send(client, request);
                SendMessage(main_wnd_handle, UPDATE_SEND, 100, 100);
                sendDone.WaitOne();
                // Receive the response from the remote device.
                Receive(client);
                receiveDone.WaitOne();
                // Release the socket.
                client.Shutdown(SocketShutdown.Both);
                client.Close();

                //获取文件长度信息
                long     dFileLen = 0;
                string   strFilelen;
                string[] responLines = totalrespon.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < responLines.Length; i++)
                {
                    if (responLines[i].IndexOf("Content-Range") > -1)
                    {
                        strFilelen = responLines[i].Substring(responLines[i].IndexOf("/") + 1);
                        dFileLen   = Int64.Parse(strFilelen);
                        break;
                    }
                }

                long partpos = dFileLen / 2;

                msFileData0 = new MemoryStream(5000000);
                msFileData1 = new MemoryStream(5000000);

                threadsDone[0] = new ManualResetEvent(false);
                threadsDone[1] = new ManualResetEvent(false);

                //初始化线程参数
                ThreadPara thrPara0 = new ThreadPara();
                thrPara0.msFData         = msFileData0;
                thrPara0.eventThreadDone = threadsDone[0];
                thrPara0.StartPos        = 0;
                thrPara0.EndPos          = partpos;


                ThreadPara thrPara1 = new ThreadPara();
                thrPara1.msFData         = msFileData1;
                thrPara1.eventThreadDone = threadsDone[1];
                thrPara1.StartPos        = partpos + 1;
                thrPara1.EndPos          = dFileLen - 1;


                //启动线程下载文件不同部分
                Thread Thread0 = new Thread(new ParameterizedThreadStart(MultiThreadsDown));
                Thread0.Start(thrPara0);

                Thread Thread1 = new Thread(new ParameterizedThreadStart(MultiThreadsDown));
                Thread1.Start(thrPara1);

                //同步两个下载线程的结束
                WaitHandle.WaitAll(threadsDone);

                //合并文件内容
                byte[]     temBuf   = new byte[1024];
                string     filename = "d:\\" + httpfile;
                FileStream fs       = new FileStream(filename, FileMode.CreateNew);

                ThreadPara[] thParas = new ThreadPara[2];

                thParas[0] = thrPara0;
                thParas[1] = thrPara1;

                for (int i = 0; i < 2; i++)
                {
                    thParas[i].msFData.Seek(0, SeekOrigin.Begin);
                    byte[] tData = new byte[4];
                    int    j     = 0;

                    //确定报头后的数据位置
                    for (; j < 1000; j++)
                    {
                        thParas[i].msFData.Seek(j, SeekOrigin.Begin);
                        thParas[i].msFData.Read(tData, 0, 4);
                        if ((tData[0] == 13) && (tData[1] == 10) && (tData[2] == 13) && (tData[3] == 10))
                        {
                            thParas[i].msFData.Seek(j + 4, SeekOrigin.Begin);
                            break;
                        }
                    }

                    long totalLen = 0;
                    int  writeLen = 0;
                    do
                    {
                        writeLen = thParas[i].msFData.Read(temBuf, 0, 1024);
                        fs.Write(temBuf, 0, writeLen);
                        totalLen += writeLen;
                    }while (totalLen < thParas[i].dataLen);
                }
                fs.Flush();
                fs.Close();
                fs.Dispose();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: kuba85/Crunchbase-Tutorial
            //Run download task,
            public int RunChildFileDownloadTask()
            {
                int CurrTaskNum = 0;

                //This is used to mark the end of ThreadTask
                ManualResetEvent[] manualEventArray = new ManualResetEvent[cdChildInfoTasks.Count];

                //get task from cdChildInfoTasks
                for (CurrTaskNum = 0; CurrTaskNum < cdChildInfoTasks.Count; CurrTaskNum++)
                {

                    manualEventArray[CurrTaskNum] = new ManualResetEvent(false);
                    ThreadPara para = new ThreadPara() { m_Event = manualEventArray[CurrTaskNum], num = CurrTaskNum };
                    ThreadPool.QueueUserWorkItem(RunAChildTask, para);

                }

                //wait for all task done
                WaitHandle.WaitAll(manualEventArray);

                //clear the task list
                cdChildInfoTasks.Clear();

                return CurrTaskNum;
            }