我用以下方法锁定了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 -- app被通知并意识到CATIA COM链接已不再存在?
我也可以用它来检测选择的变化,例如?
发布于 2014-12-26 08:53:49
您可以随时使用timer.Add一个计时器来检查它,并在它的滴答event.sorry中指定相同的代码作为答复,我没有足够的声誉来发表评论。
http://vb.net-informations.com/gui/timer-vb.htm
这个链接将对你有帮助。
发布于 2014-12-26 12:30:55
谢谢,效果很好。
我将这段代码放入Tick事件中,将计时器设置为enabled,并使用1000 use间隔每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发布于 2021-06-25 11:34:29
我建议在计时器中询问实际的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已经关闭。
https://stackoverflow.com/questions/27654354
复制相似问题