Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6061407
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T08:56:04+00:00 2026-05-23T08:56:04+00:00

I know VB.Net does not allow implicit interface implementation like C#. And thus code

  • 0

I know VB.Net does not allow implicit interface implementation like C#. And thus code like the following has no direct VB.Net correlation:

public interface IBackgroundWorkerAdapter
{
    bool IsBusy { get; set; }
    bool WorkerReportsProgress { get; set; }
    bool WorkerSupportsCancellation { get; set; }
    event DoWorkEventHandler DoWork;
    event ProgressChangedEventHandler ProgressChanged;
    event RunWorkerCompletedEventHandler RunWorkerCompleted;
    void RunWorkerAsync();
    void CancelAsync();
    void ReportProgress(int progressPercent);
    void ReportProgress(int progressPercent, object userState);
}

public class BackgroundWorkerAdapter: BackgroundWorker, IBackgroundWorkerAdapter
{

}

So the closest think I could think of in VB.Net is to do the following using the Shadows keyword (since none of the operations are virtual):

Public Class BackgroundWorkerAdapter
    Inherits BackgroundWorker
    Implements IBackgroundWorkerAdapter

    Public Shadows ReadOnly Property IsBusy As Boolean _
        Implements IBackgroundWorkerAdapter.IsBusy
        Get
            Return MyBase.IsBusy
        End Get
    End Property

    Public Shadows Property WorkerReportsProgress As Boolean _
        Implements IBackgroundWorkerAdapter.WorkerReportsProgress
        Get
            Return MyBase.WorkerReportsProgress
        End Get
        Set(ByVal value As Boolean)
            MyBase.WorkerReportsProgress = value
        End Set
    End Property

    Public Shadows Property WorkerSupportsCancellation As Boolean _
        Implements IBackgroundWorkerAdapter.WorkerSupportsCancellation
        Get
            Return MyBase.WorkerSupportsCancellation
        End Get
        Set(ByVal value As Boolean)
            MyBase.WorkerSupportsCancellation = value
        End Set
    End Property

    Public Shadows Event DoWork(
                ByVal sender As Object,
                ByVal e As System.ComponentModel.DoWorkEventArgs) _
                Implements IBackgroundWorkerAdapter.DoWork

    Public Shadows Event ProgressChanged(
                ByVal sender As Object,
                ByVal e As System.ComponentModel.ProgressChangedEventArgs) _
                Implements IBackgroundWorkerAdapter.ProgressChanged

    Public Shadows Event RunWorkerCompleted(
                ByVal sender As Object,
                ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
                Implements IBackgroundWorkerAdapter.RunWorkerCompleted

    Public Sub New()
        MyBase.New()
    End Sub

    Public Shadows Sub CancelAsync() _
                Implements IBackgroundWorkerAdapter.CancelAsync
        MyBase.CancelAsync()
    End Sub

    Public Shadows Sub ReportProgress(ByVal progressPercent As Integer) _
                Implements IBackgroundWorkerAdapter.ReportProgress
        MyBase.ReportProgress(progressPercent)
    End Sub

    Public Shadows Sub ReportProgress(
                ByVal progressPercent As Integer,
                ByVal userState As Object) _
                Implements IBackgroundWorkerAdapter.ReportProgress
        MyBase.ReportProgress(progressPercent, userState)
    End Sub

    Public Shadows Sub RunWorkerAsync() _
                Implements IBackgroundWorkerAdapter.RunWorkerAsync
        MyBase.RunWorkerAsync()
    End Sub

End Class

Then I’m trying to use the wrapper as follows:

Private ReadOnly _Worker As IBackgroundWorkerAdapter
Public ReadOnly Property Worker() As IBackgroundWorkerAdapter
    Get
        Return _Worker
    End Get
End Property

...

AddHandler Me.Worker.DoWork,
    Sub()
        ...
    End Sub

AddHandler Me.Worker.ProgressChanged,
    Sub(sender, e)
        Dim args = DirectCast(e, ProgressChangedEventArgs)
        ...
    End Sub

AddHandler Me.Worker.RunWorkerCompleted,
    Sub()
        ...
    End Sub

Me.Worker.RunWorkerAsync()

Yet, of course this doesn’t work (the event handler’s are not executing), likely because I’m calling the base class for the RunWorkerAsync and ReportProgress methods, and the base class isn’t using the Shadowed events. Thus, is there any way to achieve the same end result where the BackgroundWorker implements an interface like in C#, but instead using explicit interface implementation for VB.Net?


UPDATE With Full Solution (Using Damien_The_Unbeliever’s answer)

Imports System.ComponentModel

Public Class BackgroundWorkerAdapter
    Inherits BackgroundWorker
    Implements IBackgroundWorkerAdapter

    Public Shadows ReadOnly Property IsBusy As Boolean _
        Implements IBackgroundWorkerAdapter.IsBusy
        Get
            Return MyBase.IsBusy
        End Get
    End Property

    Public Shadows Property WorkerReportsProgress As Boolean _
        Implements IBackgroundWorkerAdapter.WorkerReportsProgress
        Get
            Return MyBase.WorkerReportsProgress
        End Get
        Set(ByVal value As Boolean)
            MyBase.WorkerReportsProgress = value
        End Set
    End Property

    Public Shadows Property WorkerSupportsCancellation As Boolean _
        Implements IBackgroundWorkerAdapter.WorkerSupportsCancellation
        Get
            Return MyBase.WorkerSupportsCancellation
        End Get
        Set(ByVal value As Boolean)
            MyBase.WorkerSupportsCancellation = value
        End Set
    End Property

    Public Shadows Custom Event DoWork As DoWorkEventHandler _
                Implements IBackgroundWorkerAdapter.DoWork

        AddHandler(ByVal value As DoWorkEventHandler)
            AddHandler MyBase.DoWork, value
        End AddHandler

        RemoveHandler(ByVal value As DoWorkEventHandler)
            RemoveHandler MyBase.DoWork, value
        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
            MyBase.OnDoWork(e)
        End RaiseEvent
    End Event

    Public Shadows Custom Event ProgressChanged As ProgressChangedEventHandler _
                Implements IBackgroundWorkerAdapter.ProgressChanged

        AddHandler(ByVal value As ProgressChangedEventHandler)
            AddHandler MyBase.ProgressChanged, value
        End AddHandler

        RemoveHandler(ByVal value As ProgressChangedEventHandler)
            RemoveHandler MyBase.ProgressChanged, value
        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)
            MyBase.OnProgressChanged(e)
        End RaiseEvent
    End Event

    Public Shadows Custom Event RunWorkerCompleted As RunWorkerCompletedEventHandler _
                Implements IBackgroundWorkerAdapter.RunWorkerCompleted

        AddHandler(ByVal value As RunWorkerCompletedEventHandler)
            AddHandler MyBase.RunWorkerCompleted, value
        End AddHandler

        RemoveHandler(ByVal value As RunWorkerCompletedEventHandler)
            RemoveHandler MyBase.RunWorkerCompleted, value
        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
            MyBase.OnRunWorkerCompleted(e)
        End RaiseEvent
    End Event

    Public Sub New()
        MyBase.New()
    End Sub

    Public Shadows Sub CancelAsync() _
                Implements IBackgroundWorkerAdapter.CancelAsync
        MyBase.CancelAsync()
    End Sub

    Public Shadows Sub ReportProgress(ByVal progressPercent As Integer) _
                Implements IBackgroundWorkerAdapter.ReportProgress
        MyBase.ReportProgress(progressPercent)
    End Sub

    Public Shadows Sub ReportProgress(
                ByVal progressPercent As Integer,
                ByVal userState As Object) _
                Implements IBackgroundWorkerAdapter.ReportProgress
        MyBase.ReportProgress(progressPercent, userState)
    End Sub

    Public Shadows Sub RunWorkerAsync() _
                Implements IBackgroundWorkerAdapter.RunWorkerAsync
        MyBase.RunWorkerAsync()
    End Sub

End Class
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T08:56:04+00:00Added an answer on May 23, 2026 at 8:56 am

    I think, as with the subs you’ve already shown, you need to pass all of your calls down to the same calls in the base class. The trickiest are the event handlers, but DoWork can be implemented as:

    Public Shadows Custom Event DoWork As DoWorkEventHandler Implements IBackgroundWorkerAdapter.DoWork
        AddHandler(Value As DoWorkEventHandler)
            AddHandler MyBase.DoWork, Value
        End AddHandler
        RemoveHandler(Value As DoWorkEventHandler)
            RemoveHandler MyBase.DoWork, Value
        End RemoveHandler
        RaiseEvent(sender As Object, e As DoWorkEventArgs)
            MyBase.OnDoWork(e)
        End RaiseEvent
    End Event
    

    And similarly for the other event handlers. In this way, event handlers added through your DoWork event are actually added to your base classes DoWork event.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I know the #warning directive does not exist in vb.net... is there anything like
Does dot net have an interface like IEnumerable with a count property? I know
Does anyone know a good .NET dictionary API? I'm not interested in meanings, rather
Does Mono .NET support and compile C++ / CLI? If not, do you know
Does anyone know of any HMM implementation in .net? I've some stuff that I
As we know Silverlight does not allow private reflection. Still, I have a public
Does Java Connection.close rollback into a finally block?. I know .Net SqlConnection.close does it.
How does ADO.Net know which version of the SQL Native Client to use if
Except https://www.php.net/manual/en/book.ktaglib.php and http://getid3.sourceforge.net/ does anyone know of any other way to work from
Does anyone know in .Net 2.0 - .Net 3.5 how to load a jpeg

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.