Sorry for bothering you.
After restructuring the code bearing in mind that callsubdelayed is async, everything worked fine.
Thanks for everything.
P.S.: I have changed the followings:
Type DownloadData (url As String, Target As Object, EventName As String,jobname As String,taskid As Int,count As Long,total As Long,retval As Boolean) '*****changed
Sub JobDone(job As HttpJob)
jobs.Remove(job.JobName)
Dim jt As JobTag = job.Tag
If jobs.Size = 0 Then EndTimer
If job.Success Then
jt.Data.count=jt.CountingStream.Count '****added
jt.Data.total=jt.Total '****added
jt.Data.retval=True '****added
CallSubDelayed2(jt.Data.Target, jt.Data.EventName & "_Progress", _
jt.data) '*****changed
CallSubDelayed2(jt.Data.Target, jt.Data.EventName & "_Complete", _
jt.Data) '*****changed
Else
jt.Data.retval=False '****added
Log(job.ErrorMessage)
CallSubDelayed2(jt.Data.Target, jt.Data.EventName & "_Complete", _
jt.Data) '*****changed
End If
End Sub
Sub timer1_tick
For Each job As HttpJob In jobs.Values
Dim jt As JobTag = job.Tag
If jt.CountingStream.IsInitialized Then
jt.Data.count=jt.CountingStream.Count '****added
jt.Data.total=jt.Total '****added
jt.Data.retval=True '****added
CallSub2(jt.Data.Target, jt.Data.EventName & "_Progress", _
jt.data) '*****changed
End If
Next
End Sub
Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)
' ********** Modified code *************
Dim cs As CountingOutputStream
cs.Initialize(File.OpenOutput(TempFolder, TaskId, False))
Dim j As HttpJob = TaskIdToJob.Get(TaskId)
Dim jt As JobTag = j.Tag
jt.CountingStream = cs
jt.Total = Response.ContentLength
jt.Data.taskid=TaskId '*****changed
If jt.Data.url = "" Then
Log("Job cancelled before downloaded started")
cs.Close
End If
Response.GetAsynchronously("response", cs , _
True, TaskId)
'**************************************
End Sub