📄 downloadtask.vb
字号:
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 + -