Обработчик обработанного события принудительно закрывает приложение - PullRequest
1 голос
/ 03 апреля 2012

У меня есть код для запуска process (блокнот), и он динамически создает обработчик событий для события Exited.

Private WithEvents notepad As New Process

notepad.StartInfo.FileName = "notepad.exe"
notepad.StartInfo.Arguments = fil
notepad.EnableRaisingEvents = True

notepad.Start()
AddHandler notepad.Exited, AddressOf ExitNotepad

Но когда я пытаюсь изменить текст метки в обработчике событий, приложение просто закрывается без каких-либо сообщений об ошибках.

Sub ExitNotepad(ByVal sender As System.Object, ByVal e As System.EventArgs)

    lblLabel.Text = "Test"

End Sub

У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 03 апреля 2012

Вы должны сделать его потокобезопасным, поскольку обработчик событий может происходить в другом потоке. Также я добавил обработчик перед началом процесса. Я использовал кнопку для запуска запуска блокнота, и моя метка называется Label1:

Public Class Form1

    Private WithEvents notepad As New Process
    Delegate Sub SetLabel1Callback()

    Sub SetLabel1()
        If Label1.InvokeRequired Then
            Dim d As New SetLabel1Callback(AddressOf SetLabel1)
            Me.Invoke(d)
        End If

        Label1.Text = "Test"
    End Sub

    Sub ExitNotepad(ByVal sender As System.Object, ByVal e As System.EventArgs)
        SetLabel1()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim fil = "C:\temp\test.txt"

        notepad.StartInfo.FileName = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "notepad.exe")
        notepad.StartInfo.Arguments = fil
        notepad.EnableRaisingEvents = True
        AddHandler notepad.Exited, AddressOf ExitNotepad

        notepad.Start()
    End Sub
End Class

И я дал ему явный путь к notepad.exe - всегда используйте явные пути, где это возможно.

Проверено на работу в Windows 7 x64 с использованием бета-версии Visual Studio 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...