使用 AsyncMode

AsyncMode 允许在执行其他方法时执行 Spel 方法。仅允许异步执行以下 Spel 类方法:

使用 AsyncMode

Arc Jump3
Arc3 Jump3CP
BGo MCal
BMove Move
CVMove Pass
Go PTran
Home Pulse
JTran TGo
Jump TMove

若要异步执行方法,需将 AsyncMode 属性设为 True,然后执行方法。当 AsyncMode 属性为 true 并执行异步方法时,方法将开始且控制将立即返回至 .NET 应用进行进一步处理。如果您在之前的方法执行过程中执行另一异步方法,则 SPEL 会等第一个方法完成,然后再开始下一方法并返回至 .NET。

若要等异步方法完成,可使用以下方式之一:

  • 执行 WaitCommandComplete 方法。
  • 将 AsyncMode 属性设为 False。

若异步命令由于错误无法开始(例如点不存在),将立即发生异常。但若在命令异步运行期间发生错误,则错误异常将在下次执行异步命令、执行 WaitCommandComplete 或将 AsyncMode 设为 False 时发生。若在下一个命令发生异常,您无法知道哪个语句导致了错误(之前语句或当前语句)。若需要在执行另一个命令前确认异步命令是否已成功完成,则应在下一个命令前调用 WaitCommandComplete。若在之前的异步命令期间发生错误,将发生带有错误编号和消息的 SpelException 异常。请参见以下示例。

VB 例:

Try  
   m_spel.AsyncMode = True  
   m_spel.Go(1)  
   ' 此处在移动时执行其他操作  
   ' 若 Go(1)执行期间有错误,执行 Go(2) 时发生异常  
   ' 因此,无法确定错误事在 Go(1) 还是 Go(2)  
   m_spel.Go(2)   
  
   m_spel.Go(3)  
   ' 此处在移动时执行其他操作  
   ' 确认 Go(3) 是否正常执行  
   m_spel.WaitCommandComplete() ' 若 Go(3) 有错误,将发生异常  
  
   m_spel.Go(4)  
Catch ex As SpelException  
   ' 处理错误异常  
  
End Try  

C# 例:

try {  
  m_spel.AyncMode = true;  
  m_spel.Go(1);  
  //  此处在移动时执行其他操作  
  //  若 Go(1)执行期间有错误,执行 Go(2) 时发生异常  
  //  因此,无法确定错误事在 Go(1) 还是 Go(2)  
  m_spel.Go(2);  
  
  m_spel.Go(3);  
  //  此处在移动时执行其他操作  
  //  确认 Go(3) 是否正常执行  
  m_spel.WaitCommandComplete();  
  //  若 Go(3) 有错误,将发生异常   
  
  m_spel.Go(4);  
}  
catch(RCAPINet.SpelException ex) {  
  //  处理错误异常  
}