我正在为与 IBM 大型机交互的 COM 库创建一个包装器。它只能从单个线程访问。为了解决这个问题,我创建了一个 System.Windows.Threading.Dispatcher 来处理在专用线程上运行所有交互。
我的问题是,如果对象没有显式处理,则调度程序会在 WinForm 应用程序退出后继续运行。永远不会为创建调度程序的对象调用 finalize 方法。我需要可靠地关闭会话以防止不必要的连接。
如果我在应用程序退出时调用 GC.Collect,它将正常关闭。但是,我创建的库将被大多数没有经验的开发人员使用。我不能指望他们总是处理、收集垃圾或全部提交到 WinForms 或 WPF 以挂钩应用程序退出事件。
我读过如果一个类有一个终结器,它的清理会被推迟到 later。这可能是问题的一部分,但我可以绕过终结器吗?