How does the "Using" statement translate from C# to VB?

79,039

Solution 1

Using has virtually the same syntax in VB as C#, assuming you're using .NET 2.0 or later (which implies the VB.NET v8 compiler or later). Basically, just remove the braces and add a "End Using"

Dim bitmap as New BitmapImage()
Dim buffer As Byte() = GetHugeByteArrayFromExternalSource()
Using stream As New MemoryStream(buffer, false)
    bitmap.BeginInit()
    bitmap.CacheOption = BitmapCacheOption.OnLoad
    bitmap.StreamSource = stream
    bitmap.EndInit()
    bitmap.Freeze()
End Using

You can get the full documentation here

EDIT

If you're using VS2003 or earlier you'll need the below code. The using statement was not introduced until VS 2005, .NET 2.0 (reference). Thanks Chris!. The following is equivalent to the using statement.

Dim bitmap as New BitmapImage()
Dim buffer As Byte() = GetHugeByteArrayFromExternalSource()
Dim stream As New MemoryStream(buffer, false)
Try
    bitmap.BeginInit()
    bitmap.CacheOption = BitmapCacheOption.OnLoad
    bitmap.StreamSource = stream
    bitmap.EndInit()
    bitmap.Freeze()
Finally
    DirectCast(stream, IDisposable).Dispose()
End Try

Solution 2

The key point is that the class being "used" must implement the IDisposable interface.

Solution 3

That would be something like this:

Dim bitmap As New BitmapImage()
Dim buffer As Byte() = GetHugeByteArray()
Using stream As New MemoryStream(buffer, False)
    bitmap.BeginInit()
    bitmap.CacheOption = BitmapCacheOption.OnLoad
    bitmap.StreamSource = stream
    bitmap.EndInit()
    bitmap.Freeze()
End Using
Share:
79,039
Daniel
Author by

Daniel

2008 BSCS from a U.S. engineering school 2008 - 2015: Fortune 500 software engineer 2016 - 2017: Healthcare sector software developer 2017 - Present: Medical student and research fellow at a US MD school

Updated on July 09, 2022

Comments

  • Daniel
    Daniel almost 2 years

    For example:

    BitmapImage bitmap = new BitmapImage();
    
    byte[] buffer = GetHugeByteArray(); // from some external source
    using (MemoryStream stream = new MemoryStream(buffer, false))
    {
        bitmap.BeginInit();
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.StreamSource = stream;
        bitmap.EndInit();
        bitmap.Freeze();
    }
    

    Can you tell me any more about using?

    Edit:

    As was discussed in the comments of JaredPar's post, this question is more concerned with an implementation of Using in VS2003. It was pointed out that Using was not introduced until .NET 2.0 (VS2005). JaredPar posted an equivalent workaround.

  • Daniel
    Daniel almost 15 years
    Which version of VB was this added? I'm working with some legacy code and Visual Studio 2003 doesn't seem to be picking up on it.
  • JaredPar
    JaredPar almost 15 years
    @hypoxide, the using statement has been around since the original VB.Net AFAIK. I changed the code to get rid of a couple of items that weren't available till later versions. Can you try that and if you see any errors add them here?
  • Chris Dunaway
    Chris Dunaway almost 15 years
    The Using statement in VB was not introduced until VS2005. It is not available in prior versions.
  • JaredPar
    JaredPar almost 15 years
    Chris is correct: en.wikipedia.org/wiki/…
  • TGnat
    TGnat almost 15 years
    Also note that for Namespace references and alias declaration C# using is the same as VB's Imports.