0

我使用以下方法锁定了 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 链接不再存在?

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

4

3 回答 3

1

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

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

此链接将对您有所帮助。

于 2014-12-26T08:53:49.233 回答
0

谢谢,它工作正常。

我将此代码放在 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
于 2014-12-26T12:30:55.950 回答
0

我建议在计时器中询问实际的 Catia 对象,而不是获取新对象。假设您有 Global 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 已关闭,则会出现异常

于 2021-06-25T11:34:29.797 回答