⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadtask.vb

📁 编程环境VB.NET2005 多线程下载
💻 VB
📖 第 1 页 / 共 2 页
字号:
        Me.m_TaskInfo.md5 = Me.m_TaskInfo.md5
        Me.m_TaskInfo.status = 1
        Me.m_TaskInfo.savePathfilename = Me.MyTaskInfo.savePathfilename
        Me.m_TaskInfo.downUrl = Me.MyTaskInfo.downUrl
        Me.m_TaskInfo.refUrl = Me.MyTaskInfo.refUrl
        Me.m_TaskInfo.Length = filesize.ToString
        Me.m_TaskInfo.Complete = "0%"
        Me.m_TaskInfo.downThreadAmount = tAmount
        Me.m_TaskInfo.thData = b
        Using conn As New Data.OleDb.OleDbConnection(connStr)
            Dim com As New Data.OleDb.OleDbCommand("", conn)
            Dim comtext As String
            com.Parameters.Add("@status", OleDb.OleDbType.VarChar).Value = Me.m_TaskInfo.status.ToString
            com.Parameters.Add("@length", OleDb.OleDbType.VarChar).Value = Me.m_TaskInfo.Length
            com.Parameters.Add("@complete", OleDb.OleDbType.VarChar).Value = Me.m_TaskInfo.Complete
            com.Parameters.Add("@threadcount", OleDb.OleDbType.VarChar).Value = Me.m_TaskInfo.downThreadAmount
            com.Parameters.Add("@thread", OleDb.OleDbType.VarBinary).Value = Me.m_TaskInfo.thData
            comtext = "UPDATE 下载数据 SET Status=@status,Length=@length,Complete=@complete,threadcount=@threadcount,Thread=@thread WHERE MD5='" & Me.MyTaskInfo.md5 & "'"
            com.CommandText = comtext
            conn.Open()
            com.ExecuteNonQuery()
            com.Dispose()
        End Using
        Me.MyTaskInfo = Me.m_TaskInfo
    End Sub
    Sub LoadTaskInfo()
        Using conn As New Data.OleDb.OleDbConnection(connStr)
            Dim com As New Data.OleDb.OleDbCommand("", conn)
            com.CommandText = "SELECT * FROM 下载数据 WHERE MD5='" & Me.MyTaskInfo.md5 & "'"
            conn.Open()
            Dim dr As OleDb.OleDbDataReader = com.ExecuteReader
            If dr.HasRows = False Then Exit Sub
            'Dim md5, status, filename, url, refurl, length, complete, tcount, thDataStr, note As String
            While dr.Read()
                Me.m_TaskInfo.md5 = dr.Item("md5").ToString
                Me.m_TaskInfo.status = CInt(dr.Item("status"))
                Me.m_TaskInfo.savePathfilename = dr.Item("Filename").ToString()
                Me.m_TaskInfo.downUrl = dr.Item("URL").ToString
                Me.m_TaskInfo.refUrl = dr.Item("RefUrl").ToString
                Me.m_TaskInfo.Length = dr.Item("Length").ToString
                Me.m_TaskInfo.Complete = dr.Item("Complete").ToString
                Me.m_TaskInfo.downThreadAmount = CInt(dr.Item("ThreadCount"))
                Me.m_TaskInfo.thData = CType(dr.Item("Thread"), Byte())
                Me.m_TaskInfo.time = CInt(dr.Item("UsedTime"))
            End While
        End Using
        Me.MyTaskInfo = Me.m_TaskInfo
    End Sub
    Sub DownDone()
        Dim completeSum As Long
        For Each t As MyDownThread In Me.thColl
            completeSum += t.MyThreadData.nowPos - t.MyThreadData.startPos
        Next
        If completeSum.ToString = Me.MyTaskInfo.Length Then
            Me.m_TaskInfo.status = 10 '完成标志
            'Me.m_TaskInfo.Complete = "100%"
            '改名操作
            Dim newName As String = Me.MyTaskInfo.savePathfilename.Replace(".working", "")
            newName = newName.Substring(newName.LastIndexOf("\") + 1, newName.Length - newName.LastIndexOf("\") - 1)
            My.Computer.FileSystem.RenameFile(Me.MyTaskInfo.savePathfilename, newName)
            Me.m_TaskInfo.savePathfilename = Me.MyTaskInfo.savePathfilename.Replace(".working", "")
        ElseIf Me.downError = True Then
            Me.m_TaskInfo.status = 7
        Else
            Me.m_TaskInfo.status = 4 '未完成标志
        End If
        Me.m_TaskInfo.Complete = CInt(100 * (completeSum) / CDbl(Me.m_TaskInfo.Length)).ToString & "%"

        '生成线程数据
        Dim sb As New System.Text.StringBuilder
        For Each th As MyDownThread In Me.thColl
            Dim tStartPos As Long = th.MyThreadData.startPos
            Dim tNowPos As Long = th.MyThreadData.nowPos 'this index
            Dim tEndPos As Long = th.MyThreadData.endPos
            sb.Append("#" & tStartPos & ":" & tNowPos & ":" & tEndPos)
        Next
        Dim encoding As System.Text.Encoding = encoding.Unicode
        Dim b As Byte() = System.Text.Encoding.Unicode.GetBytes(sb.ToString.ToCharArray)
        Me.m_TaskInfo.md5 = Me.m_TaskInfo.md5
        ' Me.m_TaskInfo.savePathfilename = Me.MyTaskInfo.savePathfilename
        Me.m_TaskInfo.downUrl = Me.MyTaskInfo.downUrl
        Me.m_TaskInfo.refUrl = Me.MyTaskInfo.refUrl
        Me.m_TaskInfo.Length = Me.MyTaskInfo.Length
        Me.m_TaskInfo.downThreadAmount = Me.MyTaskInfo.downThreadAmount
        Me.m_TaskInfo.thData = b
        'me.m_TaskInfo.time=
        Using conn As New Data.OleDb.OleDbConnection(connStr)
            Dim com As New Data.OleDb.OleDbCommand("", conn)
            Dim comtext As String
            com.Parameters.Add("@status", OleDb.OleDbType.VarChar).Value = Me.m_TaskInfo.status.ToString
            com.Parameters.Add("@filename", OleDb.OleDbType.VarChar).Value = Me.MyTaskInfo.savePathfilename '.Replace(".working", "")
            com.Parameters.Add("@complete", OleDb.OleDbType.VarChar).Value = Me.m_TaskInfo.Complete
            com.Parameters.Add("@thread", OleDb.OleDbType.VarBinary).Value = Me.m_TaskInfo.thData
            com.Parameters.Add("@t", OleDbType.Integer).Value = Me.m_TaskInfo.time
            comtext = "UPDATE 下载数据 SET Status=@status,FileName=@filename,Complete=@complete,Thread=@thread,UsedTime=@t WHERE MD5='" & Me.MyTaskInfo.md5 & "'"
            com.CommandText = comtext
            conn.Open()
            com.ExecuteNonQuery()
            com.Dispose()
        End Using
        Me.MyTaskInfo = Me.m_TaskInfo
        '完成后更新数据库
        Me.isEnd = True
        Me.isWorking = False
        Me.MyCanExit = True
        ' Me.UpTimer.Enabled = False
    End Sub
    Private Sub UpTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpTimer.Tick
        Me.m_TaskInfo.time += 1
        Dim speedSum As Long = 0, completeSum As Long, sumWrite As Integer
        If Me.thColl.Count = 0 Then Exit Sub
        Dim sb As New System.Text.StringBuilder
        For i As Integer = 1 To Me.thColl.Count
            Dim t As MyDownThread = CType(Me.thColl.Item(i), MyDownThread)
            sumWrite += t.writeCount
            speedSum += t.m_speed : t.m_speed = 0
            Dim sp As Long = t.MyThreadData.startPos
            Dim np As Long = t.MyThreadData.nowPos 'this pos
            Dim ep As Long = t.MyThreadData.endPos
            completeSum += (np - sp)
            Dim per As Double = CInt((np - sp) / (ep - sp + 1) * 100)
            If per = 100 And (np - sp) <> (ep - sp + 1) Then per = 99
            sb.Append(vbNewLine & "线程 " & i.ToString & " 状态: 开始在" & sp.ToString & " 已到位置: " & np.ToString & " 结束在:" & ep.ToString & " -  " & per & "%")
        Next
        sb.Append(vbNewLine & "写盘次数:" & sumWrite.ToString)
        'If Me.initiativeExit = True Then
        '    Me.UpTimer.Enabled = False
        'End If
        If Me.showDetail = True Then
            App.MainForm.infotxt2.Text = sb.ToString
        End If
        Dim limit As Boolean
        Dim limitTime As Integer
        If speedSum > maxSpeed Then '(completeSum - oldsum) > maxSpeed Then
            limitTime = 200
            limit = True
        Else
            limit = False
            ' limitTime = 0
        End If
        For Each t As MyDownThread In Me.thColl
            t.speedlimit = limit
            t.limitspeedtime = limitTime
        Next
        'add to list   ‘状态 文件名 大小 进度 已完成 速度 已用时间 剩余时间
        Dim s0, s1, s2, s3, s4, s5, s6, s7 As String
        'App.MainForm.ListView1.Items(Me.linkItemIndex).SubItems(0).Text =s0 "状态"
        'App.MainForm.ListView1.Items(Me.linkItemIndex).SubItems(1).Text =s1"文件名"
        'App.MainForm.ListView1.Items(Me.linkItemIndex).SubItems(2).Text =s2 "大小" 
        s3 = CInt(100 * completeSum / CDbl(Me.m_TaskInfo.Length)).ToString & "%"
        If s3 = "100%" And CStr(completeSum) <> Me.MyTaskInfo.Length Then s3 = "99%"
        s4 = CStr(completeSum)
        s5 = speedSum.ToString
        s6 = Me.m_TaskInfo.time.ToString '"t1" & Now.ToString
        s7 = CInt((CLng(Me.m_TaskInfo.Length) - completeSum) / (completeSum + 1) * Me.m_TaskInfo.time).ToString
        If App.MainForm.canUpdateInfo = True Then
             Me.linkItem.SubItems(3).Text = s3
            Me.linkItem.SubItems(4).Text = s4
            Me.linkItem.SubItems(5).Text = s5
            Me.linkItem.SubItems(6).Text = s6
            Me.linkItem.SubItems(7).Text = s7
        End If

        If Me.downError = True Then
            Me.UpTimer.Enabled = False
            RaiseEvent ShowDownTaskInfo(Me, Me.linkItem, "7")
        End If
        If completeSum.ToString = Me.m_TaskInfo.Length Then
            Me.UpTimer.Enabled = False
            RaiseEvent ShowDownTaskInfo(Me, Me.linkItem, "10")
        End If
    End Sub
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -