none
C#调用非托管的函数,阻塞,程序无法关闭 RRS feed

  • 问题

  • 写的C#程序,单独一个线程,调用了一个外部的dll文件,是非托管的,有一个函数在运行时,阻塞了,然后程序也无法退出,使用任务管理器结束任务,但是后台程序里还是有,请问大家如何彻底关闭程序呢。非托管代码出错,无法捕获到异常吗
    2018年12月22日 7:49

答案

  • 你好,

    对于非托管的程序来说,CLR的GC不管理的。我建议你可以动态加载这个非托管的代码,然后继承IDispose接口,通过这个接口来释放。 下面的链接有一个完整的例子,你可以参考一下:

    https://www.codeproject.com/Articles/258270/How-to-release-non-managed-library-loaded-into-man

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 zdyzmy 2019年6月5日 3:47
    2018年12月24日 6:33
    版主

全部回复

  • 你好,

    对于非托管的程序来说,CLR的GC不管理的。我建议你可以动态加载这个非托管的代码,然后继承IDispose接口,通过这个接口来释放。 下面的链接有一个完整的例子,你可以参考一下:

    https://www.codeproject.com/Articles/258270/How-to-release-non-managed-library-loaded-into-man

    Best regards,

    Zhanglong


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 zdyzmy 2019年6月5日 3:47
    2018年12月24日 6:33
    版主
  • 非常感谢
    2018年12月24日 13:12
  • 这个非托管的函数应该设计的不好,出现异常的时候应该要有返回并结束自己;(类似接口设计)

    否则你外面调用他的如何处理?如果改不了,可以在主线程中监控一下这个子线程的执行时间,超时后就强制终止执行;


    family as water

    2019年1月22日 3:15