退出事件处理程序强制应用程序关闭
问题描述:
我有一些代码用于启动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
任何人有任何想法?
答
您需要使其线程安全,因为事件处理程序可能发生在另一个线程中。另外,我在启动过程之前添加了处理程序。我用了一个按钮来启动启动记事本,我的标签名为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明确的路径 - 如果可能的话总是使用显式路径。
使用Visual Studio 11 Beta测试为在Windows 7 x64上工作。