Whileは単にタイマーとして使用しているんですね。
それなら
Private Sub timeWaiteTime(ByVal waiteTime As DateInterval)
Dim startTime As DateTime = Now
While (Now.Subtract(startTime).TotalMilliseconds < waiteTime)
System.Threading.Thread.Sleep(1)
Application.DoEvents()
End While
End Sub
と言う関数を作っておいて
timeWaiteTime(5000)
と呼びだした方がいいかも知れません。
実際のところFormとClassの違いはないのです。
従ってFormにしようかClassにしようかと言う問いは意味がありません。
.NET上でのFormはデザイナーがインスタンスやイベントハンドラーを自動で作成してくれます。
従ってプログラムの容易さや作業スピードのことを考えると、Formを上手に使いましょう
と言うことになります。
SerialPort専用のフォームを作ってFomSerialPortとしたとします。
そしてその中にSerialPort1を置いたとしますよね、そうすると
FomSerialPortはクラスですからForm1の中でインスタンスを作る必要が
有ります。
Public Class Form1
Dim FormSerialPort1 As New FormSerialPort
'ポートをオープンする
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
FormSerialPort1.SerialPort1.Open()
End Sub
End Class
こんな具合になるわけです。
もちろんデリゲートなんかもFomSerialPortクラスの中に書きます。
「FormSerialPort1.」はフォームのメンバーに対するアクセス子ではなく
Classのメンバーに対するアクセス子なのです。
SerialPortの受信はセカンドスレッドで行われますから、その処理は
SerialPortのインスタンスのあるクラスのインスタンスすなわち
FormSerialPort1で行われる方法が判り易いと思います。
Dim UART1 as FormUART = New FormUART
Dim rootNo as integer = 0
Delegate Sub dlgAddText(ByVal GetText As String)
Private Sub Button1_click 〜
Dim Data as String = "ABC"
UART1.Send(Data)
End Sub
Public Sub AddText(ByVal strGetText As String)
Select Case rootNo
Case 1
Dim strTmp As String = ""
Dim strVer_Array() As String = Split(strGetText)
For i As Integer = 0 To strVer_Array.Length - 1
strTmp = strTmp + Chr(strVer_Array(i))
Next
TextBox1.Text = strTmp
Case 2
〜
End Select
End Sub
−−−−−−−−−−−−−−−
Class FormUART
Dim LByte As List(Of Byte) = New List(Of Byte)
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
Handles SerialPort1.DataReceived
〜(strInに取り込んだデータを格納)
Me.Invoke(New Form1.dlgAddText(AddressOf Form1.AddText), New Object() {strIn})
End Sub