我使用以下方法锁定了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链接不再存在?
我还可以用它来检测选择变化,例如?
答案 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 已关闭