I probably find the same as you in search of disposing DataTable. My search also indicate that Controller is disposable, and that you can override Dispose to clean up what is needed, it is called after view is rendered.
Just to have done it, try "clean solution" and publish again. I tested it, even copied your entire manifest into a project and did a Clickonce publish and it works for me from VS 2022, and dpiAware takes effect based on it.
It is possible older VS/Clickonce has trouble with the asm.v3...
Project properties, Application tab, "View Windows Settings" will open the application manifest.
Scroll a bit down, there you'll find the dpiAware section (including namespace definition) which you can uncomment (select and Ctrl-K-U keybord shortcut).
An example with HttpClient
Private client As New HttpClient
Private Async Sub JsonPostSample(url As String, json As String, file As String)
Using content As New StringContent(json, System.Text.Encoding.UTF8, "application/json")
Using response = Await...
Negative value is not possible for Byte data type. Since Atan2 also expect Double values as input convert the values to that type also. You can do that with CDbl conversion function. Type Conversion Functions - Visual Basic
I could not reproduce it for a DataGridView with those three properties set:
Dim dgv = New DataGridView
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False
.DefaultCellStyle.SelectionBackColor = Color.Red
.RowCount = 5
.ColumnCount = 2
It goes to Output window normally, unless you have enabled option to redirect all Output Window text to Immediate Window.
In a forms project it is not common to write to Console, for debug output use Debug.Write.
I will suggest that you handle KeyDown event for textbox, here you can check e.KeyCode for Up/Down navigations keys.
You should also set e.SuppressKeyPress to True in this case to avoid default navigation in text, it would be confusing if this happens also when DataGridView is navigated.
You have 2 ReadByte calls in the loop, each one advancing one byte. If you want to do 2 things with the same byte (display it and compare it) then you must call ReadByte only once and assign it to a variable.
for i = 0 to (length-1)
dim value = readbyte