Переопределение видимого значения в классе приложения и затем отображение основной формы вызывает переполнение стека

#vb.net #visual-studio-2017

#vb.net #visual-studio-2017

Вопрос:

Я пытался создать программу, которая будет воспроизводить звук запуска (потому что Microsoft, по-видимому, ненавидит их сейчас), и для этого требуется, чтобы форма была полностью скрыта при запуске программы, так что это просто звук, но мне также нужно получить доступ к форме, чтобы изменить настройки, когда мне нужно, чтобыуспешно скрыть форму, которую я использую этот код:

 Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
    If Not Me.IsHandleCreated Then
        Me.CreateHandle()
        value = False
    End If
    MyBase.SetVisibleCore(value)
End Sub
  

Который, насколько я понимаю, переопределяет запуск в классе приложения и предотвращает запуск формы запуска, но я сделал так, чтобы он воспроизводил звук только в том случае, если -t аргумент передается через ярлык, поэтому я могу получить доступ к основной форме, чтобы легче изменять настройки, когда мне нужно, вот чтополный код выглядит так, чтобы вы могли лучше понять, о чем я говорю

 Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
    If Not Me.IsHandleCreated Then
        Me.CreateHandle()
        value = False
    End If
    MyBase.SetVisibleCore(value)
    Dim clArgs() As String = Environment.GetCommandLineArgs()
    If clArgs.Count() = 2 Then
        For i As Integer = 1 To 1 Step 1
            If clArgs(i) = "-t" Then
                Try
                    My.Computer.Audio.Play(My.Settings.startSound, AudioPlayMode.Background)
                Catch ex As Exception

                End Try
            Else
                Me.Show()
            End If
        Next
    End If
End Sub
  

Итак, чтобы подвести итог тому, что здесь происходит, он начнет с проверки наличия -t переданного аргумента, CommandLineArgs и если он есть, он будет воспроизводить звук, фактически не запуская форму, но если его нет, он запустит форму, но по какой-то причине, если у меня есть Me.show() в кодеэто вызовет переполнение стека, и я понятия не имею, почему это происходит, кроме того, что этот код, скрывающий форму, является причиной этого

Комментарии:

1. Вы имеете в виду, что вы получаете переполнение стека только при Me.Show() выполнении? Эквивалентно Me.Show() заданному .Visible = True в форме ( ссылка здесь ), есть ли вообще какой-либо случай, когда вы можете успешно отобразить форму?

2. Есть ли причина не использовать приложение VB. Событие запуска или отключение среды приложения VB и написание собственного Sub Main для обработки аргументов командной строки?