You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Process.Exited按钮事件异常:调整代码后仍报错,求解决方案

问题解决方案

你的代码存在两个核心问题:

  1. 跨线程访问UI控件异常:Exited事件在后台线程触发,WinForm控件仅允许在创建它的UI线程中修改属性,直接操作Button1.Enabled会抛出跨线程异常。
  2. 变量访问错误与拼写错误:Process1是Button1_Click方法内的局部变量,OnExit方法无法直接访问;你修改后的代码还把Process1拼写成了Procces1,这也会导致编译错误。

修正后的完整代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Button1.Enabled = False
    Dim Process1 As New Process
    Process1.StartInfo.FileName = ("data\test.exe")
    Process1.EnableRaisingEvents = True
    AddHandler Process1.Exited, AddressOf OnExit
    Process1.Start()
End Sub

Sub OnExit(ByVal sender As Object, ByVal e As EventArgs)
    ' 从sender获取触发事件的Process实例,避免局部变量访问问题
    Dim targetProc As Process = DirectCast(sender, Process)
    ' 释放进程资源
    targetProc.Close()

    ' 跨线程安全地修改UI控件状态
    If Button1.InvokeRequired Then
        ' 需要切换到UI线程执行操作
        Button1.Invoke(Sub() Button1.Enabled = True)
    Else
        Button1.Enabled = True
    End If
End Sub

关键说明:

  • 通过DirectCast(sender, Process)获取触发事件的进程实例,无需依赖局部变量。
  • 使用InvokeRequired判断是否需要跨线程调用,通过Invoke将UI操作切换到UI线程执行,避免跨线程异常。
  • 修正了拼写错误,确保代码编译通过。

内容的提问来源于stack exchange,提问作者YS HOME

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:25:21