Console Applications

Menus with Console.ReadKey(True).Key, progress indicators, Console.SetCursorPosition, Console.CancelKeyPress (Ctrl+C).

Use System.CommandLine or Spectre.Console (rich tables and prompts) for advanced CLIs.

Generic Host (Microsoft.Extensions.Hosting) gives you DI, configuration, and logging in console apps.

Module Program
    Function Main(args As String()) As Integer      ' returning Integer sets the exit code
        Console.Title = "Inventory Tool"
        Console.ForegroundColor = ConsoleColor.Green
        Console.WriteLine("=== Inventory Tool ===")
        Console.ResetColor()

        If args.Length = 0 Then
            Console.Error.WriteLine("Usage: inventory <command> [options]")
            Return 1
        End If

        Select Case args(0).ToLower()
            Case "list" : ListItems()
            Case "add"
                Console.Write("Item name: ")
                Dim name = Console.ReadLine()
                Console.Write("Quantity: ")
                Dim qty As Integer
                While Not Integer.TryParse(Console.ReadLine(), qty)
                    Console.Write("Please enter a number: ")
                End While
                AddItem(name, qty)
            Case Else
                Console.WriteLine($"Unknown command: {args(0)}")
                Return 2
        End Select
        Return 0
    End Function

    Sub ListItems()
        Console.WriteLine($"{"Item",-15}{"Qty",5}")
        Console.WriteLine(New String("-"c, 20))
    End Sub

    Sub AddItem
…