CATIA和VB.NET检测外部应用程序中CATIA的关闭

时间:2014-12-26 07:48:49

标签: vb.net vba api com catia

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

我还可以用它来检测选择变化,例如?

3 个答案:

答案 0 :(得分:1)

您可以使用计时器一直查看。添加计时器并在其TICK事件中指定相同的代码。发布此作为答案。我没有足够的声誉发表评论。< / p>

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

此链接对您有所帮助。

答案 1 :(得分:0)

谢谢,它运作正常。

我将此代码放在Tick事件中,将timer设置为启用,并使用1000ms间隔每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

答案 2 :(得分: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 已关闭