解决方案
首先,该错误出现的原因是:当尝试访问一个已经释放引用了的通知器时即会出现
错误1 。
事实上,在某些特定场景中(例如下面截图所示的代码),编程者是有意利用这个错误的出现来停止消费者循环(即Notifier Loop 1和Notifier Loop 2这两个循环)。因此在这些场景中,这些错误的出现是预期中的,是整个程序流程的一环节。这样使用是因为生产者循环(即Notification Loop这个循环)内没有其它的变量可以使生产者循环本身以及消费者循环都停止,所以才故意运用了“
错误1”的出现来停止消费者循环。请注意,使用这种方法时,不应该把消费者循环的错误簇输出到程序最末端的建议错误处理器中(否则就会让这个故意被运用的错误被提示出来,使得用户将其与其它可能出现的错误混淆)。
当运用“利用错误的出现停止通知器程序”这种手法时,建议使用如下的两种方法之一来避免“
错误1”带来的影响:
- 不将消费者循环的错误簇连线到后续的程序流中,即:在消费者循环内终止这些错误簇数据流的传递;
- 针对消费者循环流出的错误簇使用清除错误VI将错误1人为地去除过滤掉。
如果您想要避免运用这种方式来停止消费者循环,则需要有方法将生产者循环的停止信息传递到消费者循环中。基于这种思路,增加一个专门用来传递循环停止条件的辅助通知器也许会是最佳做法。请参阅下面截图的示例:
注意:上面的两个代码片段均出自LabVIEW自带的范例。在LabVIEW程菜单中选择
帮助>>查找范例。在NI范例查找器中,选择浏览方式为
目录结构,在
Sychronazation的文件夹目录下即可找到通知器的相关范例。