投稿者 あせたけ  (社会人) 投稿日時 2020/10/25 21:04:35
魔界の仮面弁士さん、るきおさんにヒントを頂き、
るきおさんの
> UIスレッドでしか実行できない処理なのではないか
が決めてとなり、Form1に1度処理を戻し、デリゲート処理する事で音が鳴りました。

※変更後
----------------------------------------------------------------------------------
Public Class Form1
    private sub Form1_Load(ByVal sender As Object, ByVal e As eventAugs) Handles Mybase.Load
        Dim m As New Main(Me)
    End Sub

    Public Sub soundPlay(ByVal snd As Sound.snd)
        Sound.SoundCheck(Me, snd)
    End Sub
End Class


End Class

Public Class Main
    Public Property f As Form1
    Private WithEvents lcs As New LanConverter.LanConverters()
    Private WithEvents Sensers As New SenserS()
    Private Settings As New Settings()
    Private Olc As New List(Of String)

    Private Sub New(ByVal f as form)
        Me.f = f
    End Sub

    Private Sub OutputEventsCatch(ByVal sender As Object, ByVal e As LanConverter.LCEventArgs) Handles Sensers.AleartEvent

        Select Case e.InputStatus
            Case SenserInterface.SenserInputStatus.通常
                f.soundPlay(Sound.snd.None)
            Case SenserInterface.SenserInputStatus.発報
                f.soundPlay(Sound.snd.Warning)
            (・・・省略・・・)
          End Select
    End Sub

Public Class Sound
    Delegate Sub SoundDelegate(ByVal f As Form1, ByVal s As snd)

    Public Sub SoundCheck(ByVal f As Form1, ByVal s As snd)
        If f.InvokeRequired Then
            f.Invoke(New SoundDelegate(AddressOf SoundCheck), f, s)
            Return
        End If
        Sound(s)
    End Sub

    (Soundメソッドは前出)
End Class
----------------------------------------------------------------------------------

何かあまり納得は行っていませんが、とりあえず音は鳴りましたので、ヨシとします…^^;

私感
 大きなマルチスレッドプログラムは初めて組みますが、マルチスレッドプログラミングは難しい…^^;
 メインスレッド? ワーカースレッド? フォアグラウンドスレッド? バックグラウンドスレッド?
 もっと精進せねば…

ありがとうございました。