I'm attempting to monitor the progress of a file upload by comparing the
Request.TotalBytes and Request.ContentLength via a timer event in an HTTP
Module.  It seems to be locking up.  Am I on the right track?  Will the
timer work with the HTTP Module in this fashion, or does the module
interfer with the file being uploaded.  The code is attached.  Thanks for
any help/suggestions!

---------------

Imports System.Web

Public Class progressModule
    Implements IHttpModule

    Dim pHandler As ProgressHandler
    Dim context As HttpContext
    Dim currentId As String
    Dim timer As Timers.Timer

    Public Sub Init(ByVal Application As Web.HttpApplication) Implements
IHttpModule.Init
        AddHandler Application.BeginRequest, AddressOf
Me.Application_BeginRequest
        AddHandler Application.EndRequest, AddressOf
Me.Application_EndRequest
        AddHandler Application.Error, AddressOf Me.Application_Error
    End Sub

    Public Sub Dispose() Implements IHttpModule.Dispose
        timer = Nothing
    End Sub

    Private Sub Application_Error(ByVal source As Object, ByVal e As
EventArgs)
        Dim application As HttpApplication = CType(source, HttpApplication)

        If Not currentId Is Nothing Then
            pHandler.SetError(currentId, application.Server.GetLastError())
        End If
    End Sub

    Private Sub Application_BeginRequest(ByVal source As Object, ByVal e
As EventArgs)
        Dim application As HttpApplication = CType(source, HttpApplication)
        context = application.Context

        currentId = context.Request.QueryString("Id")

        If Not currentId Is Nothing Then
            pHandler = New ProgressHandler

            timer = New Timers.Timer(1500)
            AddHandler timer.Elapsed, AddressOf OnTimerTick
            timer.Start()
            pHandler.UpdateValues(currentId, context.Request.TotalBytes,
context.Request.ContentLength)
        End If
    End Sub

    Private Sub Application_EndRequest(ByVal source As Object, ByVal e As
EventArgs)
        Dim application As HttpApplication = CType(source, HttpApplication)
        Dim context As HttpContext = application.Context

        If Not currentId Is Nothing Then
            timer.Stop()
            timer.Close()
        End If
    End Sub

    Private Sub OnTimerTick(ByVal source As Object, ByVal e As
Timers.ElapsedEventArgs)
        pHandler.UpdateValues(currentId, context.Request.TotalBytes,
context.Request.ContentLength)
    End Sub
End Class

Reply via email to