我有一个 C# 程序,它使用来自另一个程序集的类,并且这个类调用一个非托管 DLL 来进行一些处理。这是一个片段:
public class Util
{
const string dllName = "unmanaged.dll";
[DllImport(dllName, EntryPoint = "ExFunc")]
unsafe static extern bool ExFunc(StringBuilder path, uint field);
public bool Func(string path, uint field)
{
return ExFunc(new StringBuilder(path), field);
}
...
}
Util util = new Util();
bool val = util.Func("/path/to/something/", 1);
我遇到的问题是,如果我调用“Func”,我的主 C# 程序将不会卸载。当我在主窗体中调用 Close() 时,如果我在任务管理器中查看,该进程仍然存在。如果我删除对“Func”的调用,程序会很好地卸载。我已经做了一些测试,程序 Main 函数肯定会返回,所以我不确定这里发生了什么。