Search code examples
c#vb.nettranslationimplementationiasyncresult

vb.net implementing IAsyncResult.AsyncState


I can easily do this in C#...but I need the equivalent in VB.Net. I need to be able to implement various IAsyncResult properties in VB.Net.

IN C#

Works like a champ...

public object AsyncState { get; set; }

IN VB.NET - THIS FAILS

This fails because you cannot overload a property in VB.Net

Public ReadOnly Property AsyncState() As Object Implements IAsyncResult.AsyncState
    Get
        '... the GET's code goes here ...
    End Get
End Property
Public WriteOnly Property AsyncState() As Object
    Set(ByVal value As Object)
        '... the SET's code goes here ...
    End Set
End Property

IN VB.NET - BOTH THESE FAIL

This fails the "must implement IAsyncResult" requirement

Public AsyncState As Object
Public AsyncState As Object Implements IAsyncResult.AsyncState

Solution

  • This did the trick...

        Public Class AsyncResult
            Implements IAsyncResult
    
    #Region "CONSTRUCTORS"
    
            Public Sub New(ByVal callback As AsyncCallback, ByVal context As HttpContext)
                _asyncCallback = callback
                _httpContext = context
                _createdTime = DateTime.Now
            End Sub
    
    #End Region
    
    #Region "PROPERTIES"
    
            Public Const TimeoutSeconds As Integer = 3
    
            Private _asyncCallback As AsyncCallback
            Private _httpContext As HttpContext
            Private _createdTime As DateTime
    
            Public ReadOnly Property TimedOut() As Boolean
                Get
                    Return ((DateTime.Now - _createdTime).TotalSeconds >= TimeoutSeconds)
                End Get
            End Property
            Public Property Response() As Response
                Get
                    Return m_Response
                End Get
                Set(ByVal value As Response)
                    m_Response = value
                End Set
            End Property
            Private m_Response As Response
    
    #Region "IAsyncResult Members"
    
            Public ReadOnly Property HttpContext() As HttpContext
                Get
                    Return _httpContext
                End Get
            End Property
            Public ReadOnly Property AsyncState() As Object Implements IAsyncResult.AsyncState
                Get
                    Return m_AsyncState
                End Get
                'Set(ByVal value As Object)
                '    m_AsyncState = value
                'End Set
            End Property
            Private m_AsyncState As Object
    
            Private ReadOnly Property IAsyncResult_AsyncWaitHandle() As System.Threading.WaitHandle Implements IAsyncResult.AsyncWaitHandle
                Get
                    Throw New NotImplementedException()
                End Get
            End Property
    
            Private ReadOnly Property IAsyncResult_CompletedSynchronously() As Boolean Implements IAsyncResult.CompletedSynchronously
                Get
                    Return False
                End Get
            End Property
    
            Public ReadOnly Property IsCompleted() As Boolean Implements IAsyncResult.IsCompleted
                Get
                    Return m_isCompleted
                End Get
                'Set(ByVal value As Boolean)
                '    If Not value Then
                '        Return
                '    End If
    
                '    Me.m_isCompleted = True
                '    _asyncCallback(Me)
                'End Set
            End Property
            Private m_isCompleted As Boolean = False
    
    #End Region
    
    #End Region
    
    #Region "METHODS"
    
            Public Function ProcessRequest() As Boolean
    
                ' Any "Execution" code goes here...
    
                Return Me.IsCompleted
            End Function
    #End Region
    
        End Class