我有一个VB.NET用户控件保存PDF文档,然后显示在WebBrowser控件中。代码如下所示:保存一个PDF文档似乎保留在内存中的引用(VB.NET)
Using myPdfDoc As New FileStream(fileName, FileMode.Create)
Dim byt As Byte() = comLib.GetData();
If Not byt Is Nothing Then
myPdfDoc.Write(byt, 0, byt.Length)
myPdfDoc.Flush()
myPdfDoc.Close()
webBrowserCtl.Navigate(fileName)
End If
End Using
comLib是一个COM互操作库,用VB6编写,获取相关数据。
就我所知,此代码保留对PDF文档的引用(因为VB.NET在程序完成时不会关闭)。我发现this这篇文章似乎暗示Adobe没有正确清理它,但实施其建议的更改似乎没有帮助。
为什么我会得到这种行为?在VB6中,没有正确关闭的程序总是由不清除的零散对象引用造成的。这在VB.NET中仍然如此吗?如果是这样,我能做些什么来确定哪个对象,或者为什么会发生这种情况?
在.NET中,流浪对象引用不应该阻止程序关闭(至少如果它们是托管对象)。但是,任何仍在运行的线程都会阻止程序退出。也许还有一个线程在COM库中运行(可能是由于VB6对象引用的错误?)。另外,由于您使用COM,因此您应确保在Main方法中具有STAThread属性。 – Justin 2011-05-25 15:32:23
对不起,当我说程序我不完全准确。这是一个用户控件(为了简单起见,我说的是程序)。可以/我应该还是使用STAThread? 有什么方法可以查看仍然有效的线程吗? – 2011-05-25 15:41:19