我有一个项目,提供一个人在编写vbscript文件时可以使用的互操作库(例如从自定义数据源导入数据)。
在一个特定的调用中,底层的c#库启动一个线程来写入事件数据。我们希望数据是异步写入的(这是出于不同的原因;互操作库只使用事件写入功能)并将线程创建为Foreground线程,以防止进程终止直到它们完成。
问题是当运行* .vbs文件时,进程将运行完成并退出。正在进行的任何前台线程在完成之前终止。
当* .vbs文件完成正常的预期行为时,是否会终止前台线程?
我还在c#控制台应用程序中重现了该场景,该应用程序以Environment.Exit(0)终止,它将前台线程关闭为正常行为。使用return语句退出控制台应用程序只允许在所有前台线程终止后终止。
答案 0 :(得分:1)
.NET框架负责在主线程退出(通常)时等待那些前台线程,而不是通过强制终止进程而等待您找到的。
VBScript对于这个特定的东西没有这样的框架,至少不会处理或了解从它使用的COM对象构造的.NET线程。
因此,VBScript完全没有注意到你的主题,并且在它认为正确的时候会很乐意推翻这个过程,而这反过来会强制终止你的主题。
有几种方法可以解决这个问题: