【问题标题】:CATIA and VB.NET detect closing of CATIA in external appCATIA 和 VB.NET 检测外部应用程序中 CATIA 的关闭
【发布时间】:2015-02-23 14:26:53
【问题描述】:

我使用以下方法锁定了 Catia:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim boolCatAlive As Boolean
    boolCatAlive = False

    Try
        Dim myCatia As INFITF.Application
        myCatia = Interaction.GetObject(vbNullString, "CATIA.Application")
        boolCatAlive = True

    Catch ex As Exception
        boolCatAlive = False
    End Try

    Select Case boolCatAlive
        Case True
           'continue loading app, do my stuff

        Case Else
           'end this now
            MsgBox("No running CATIA instance detected, please start a new CATIA instance and re-run this program.", MsgBoxStyle.Critical, "Error")
            End
    End Select

End Sub

所以这是表单加载时的一个简单布尔开关,它决定应用程序是否要加载。

这工作正常,但只在应用启动时进行一次检查。有没有办法持续检测 CATIA 状态,以便 - 如果用户在我的应用程序运行过程中退出 CATIA - 应用程序会收到通知并意识到 CATIA COM 链接不再有效?

例如,我也可以使用它来检测选择更改?

【问题讨论】:

  • 如何启动 catia?通过快捷方式还是通过另一个过程?如果是通过过程,您可以直接获得有关 catia 实例活动的信息。通过 getobject 您无法知道哪个实例处于活动状态,也无法知道有多少。如果您只想阅读进程是否存在,您也可以通过 Windows 进程来完成

标签: vb.net vba api com catia


【解决方案1】:

您可以使用计时器一直检查它。添加一个计时器并在其 TICK 事件中指定相同的代码。很抱歉将此作为答案发布。我没有足够的声誉来发表评论。

http://vb.net-informations.com/gui/timer-vb.htm

此链接将对您有所帮助。

【讨论】:

    【解决方案2】:

    谢谢,很好用。

    我将此代码放入 Tick 事件中,将计时器设置为启用,并使用 1000 毫秒间隔每 1 秒检查一次 CATIA 链接。

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim boolCatAlive As Boolean
        boolCatAlive = False
    
        Try
            Dim myCatia As INFITF.Application
            myCatia = Interaction.GetObject(vbNullString, "CATIA.Application")
            boolCatAlive = True
    
        Catch ex As Exception
    
            boolCatAlive = False
    
        End Try
    End Sub
    

    【讨论】:

      【解决方案3】:

      我建议在计时器中询问实际的 Catia 对象,而不是获取新对象。假设您有全局 CatiaApp 变量

      把类似这样的计时器放进去

      Try
         If CatiaApp.Name.Length > 0 Then
         'catia is alive
         End If
      Catch ex As Exception
         'catia is down
         CatiaApp = Nothing
      End Try
      

      如果 Name.Length 失败,表明 catia 已关闭,则会出现异常

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多