dm 脚本捕获“分析粒子”错误

2023-12-26

做的时候

ChooseMenuItem("Analysis", "Particles", "Analyze Particles") 

我有时会收到“无效索引”错误窗口。有没有办法捕获该错误? 这样做,

try {
    ChooseMenuItem( "Analysis", "Particles", "Analyze Particles" )
}
catch {
    okdialog("error")
}

没有捕获错误。 “无效索引”错误可能是在完成菜单操作“分析粒子”后出现的错误。谁能指出如何捕捉这个错误?找出这个错误的根源是一个很大的优势。我使用的是 GMS 1.84。


我认为您遇到的问题是粒子分析正在(至少部分)在单独的后台线程上运行。

我不相信在这种情况下有办法直接捕获这些异常。

我不再使用 GMS 1.84,但我确实在 GMS 3.2 上进行了尝试,您可能也想这样做以更好地了解正在发生的情况。


首先,您的 Try/Catch 循环是可以的,但是如果您不在 catch 中放置“break”,那么一旦离开 catch 部分,异常仍然会被提升到系统,即您经常想做的事情:

Try{ 
    ... }
Catch{
    ...
    break
}
...

为了测试脚本对被调用方法的异常的行为方式,我首先编写了一个小脚本并将其“安装”为菜单命令,一次使用后台线程,一次不使用后台线程。我通过文件菜单安装了它们Custom带有命令名称的菜单BT and nBT, 分别:

// $BACKGROUND$
Result( "\nStart and wait" )
number i = 0
while( i < 100 ){
    i++
    sleep(0.05)
    if ( ShiftDown() ) break
    if ( OptionDown() ) Throw("Broken")
    Result( "." )
}
Result("\nDone and exit.")

and

Result( "\nStart and wait" )
number i = 0
while( i < 100 ){
    i++
    sleep(0.05)
    if ( ShiftDown() ) break
    if ( OptionDown() ) Throw("Broken")
    Result( "." )
}
Result("\nDone and exit.")

然后我使用“ChooseMenuItem()”在以下脚本中进行测试:

string name = TwoButtonDialog("Background threaded?", "yes", "no" ) ? "BT" : "nBT"
number success = 0
Try{
    Result( "\n Calling: " + name )
    success = ChooseMenuItem("Custom","",name)
}
catch
{
    Result("\n Caught exception." )
    break
}
result("\n Success: " + success )

使用此组合进行测试(并使用 ALT 键在例程中引发异常)我可以验证命令的行为正如预期的那样:

  • 如果例程由ChooseMenuItem命令是在主线程上启动,然后该调用的执行将“阻止”主脚本,直到完成 - 无论是在结束时,还是在抛出异常时。主脚本正确捕获异常并打印结果。
  • 如果例程由ChooseMenuItem命令是在单独的(后台)线程上启动,然后主脚本立即继续。ChooseMenuItem立即成功返回(如果可以启动命令),并退出 Try/Catch 循环。后台线程上被调用例程抛出的任何异常将不再被捕获。

至于错误的根源:“无效索引”消息指向主脚本删除(或保留在范围内)的某个对象,该对象预计被调用的后台例程存在(或不再存在)。这可以是图像或图像文档或图像或图像显示器上的任何对象(ROI、掩模...)的显示。

我怀疑你的主要脚本正在做一些事情,比如关闭使用过的图像?如果“分析”是在单独的线程上进行的,那么您的主脚本可能会太快或太慢,从而导致事情不同步。您可能需要添加人为暂停(sleep())和更复杂的图像跟踪系统(使用图像ID)在主脚本中以避免此类事情。

Using ChooseMenuItem()是一种变通的黑客解决方案,因此任何针对您的问题的错误预防解决方案也可能是需要一些丑陋的“创造力”的代码黑客。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dm 脚本捕获“分析粒子”错误 的相关文章

  • 由于 getValue 和单元格插入,处理时间可能较长

    我刚刚编写了我的第一个 google apps 脚本 该脚本是从 VBA 移植的 它格式化了一列客户订单信息 感谢您的指导 描述 该代码通过其 前缀来标识州代码 然后将以下名字与姓氏 如果存在 组合起来 然后 它会在姓氏所在的位置写入 订单
  • 如何在WKWebView上加载URL?

    我正在尝试在包含 CSV 文件的 WKWebView 上加载 URL 当我尝试正常加载时 它给了我一个错误 文件格式不受支持 可能已损坏 即使移动 safari 也给我同样的错误 然后我尝试使用 MIME 类型与 WKWebView 的以下
  • 如何使用访问控制允许来源?它只是放在 html head 标签之间吗?

    我一直在读关于Access Control Allow Origin因为它似乎可以有效地允许跨域请求 因为我可以访问外部站点 我的问题是我该如何使用Access Control Allow Origin允许跨域请求 我尝试过这个 别笑 顺便
  • 如何在树枝模板中的变量之间添加空格?

    这是一个非常简单的问题 但我还没有找到答案 这段代码 civilite nom prenom 打印 MRJOHSONBarry 我想在变量之间添加空格 我该怎么做 如果 Civilite nom prenom 不起作用 怎么样 civili
  • 我不断收到类型错误

    好吧 我正在自学 python 类 当我运行代码时 出现以下错误 class Critter object A virtual pet def init self name mood print A new critter has been
  • 使用批处理文件在 Windows 中生成 GUID

    如何在 Windows 中使用命令行运行的批处理文件中生成 GUID Windows SDK 附带了一个名为uuidgen 如果您有 Visual Studio 您将拥有 Windows SDK 并且需要运行Visual Studio 命令
  • WPF - 从 ItemsControl 的 ItemTemplate 内绑定到项目索引?

    有没有办法从 ItemsControl 的 ItemTemplate 中绑定到 ItemIndex 例如
  • 向 Ruby 数组添加回调函数,以便在添加元素时执行某些操作

    我想向 Ruby 数组添加回调函数之类的东西 这样当将元素添加到该数组时 就会调用该函数 我能想到的一件事是重写所有方法 如 有更简单的解决方案吗 以下代码仅调用size changed当数组大小发生更改并且传递数组的新大小时挂钩 a cl
  • 如何为继承的槽定义 S4 原型

    我有一个基类 我们称之为 A 其表示对于许多其他类来说是通用的 因此我定义了其他类 例如 B 来包含这个类 我想设置这些其他类 B 的原型以包含从 A 继承的插槽的默认值 我认为这是很自然的 setClass A representatio
  • SAS 错误消息(致命:在 MISSING 涂片生成期间检测到代码生成错误)

    有谁知道这个错误消息是什么意思 致命 在 MISSING smear 生成期间检测到代码生成错误 它是在连接大约 40 个数据集时发生的 我相信这可能是由于变量太多 大约 217 而达到了内存限制 但最好能得到这一点的确认 日志档案 301
  • jstree 自定义节点标记

    有没有办法拥有自定义标记或向某些节点添加额外的 html 元素 例如 我们想在路径下的所有节点的节点文本后面添加一个箭头 链接 当用户单击该箭头时 打开上下文菜单 我知道可以使用右键单击打开上下文菜单 但要求是在节点后面有一个箭头 并且单击
  • 应用程序退出时关闭模态视图控制器

    我有一个视图控制器 视图 A 当用户按下按钮时呈现模态视图 B 并且视图 B 本身有一个按钮来呈现视图 C 我的问题是 如果用户在视图 B 或如图 C 所示 下次启动应用程序时将出现相同的视图 有没有办法在退出时关闭视图 B 和 C 或在应
  • 如何在网站上预览用户要上传的视频文件(PHP、FiileAPI JS)

    我的意思是 当用户从系统中选择视频文件时 网页已经向他们显示他们想要上传的文件 我已经使用 FileAPI JS 使用图像文件进行预览 我想对视频文件的 FileAPI JS 做同样的事情 所以 它必须在我的客户端内工作 谢谢并感谢您的回答

随机推荐