Pregunta

Tengo un programa de C # que usa una clase de otro conjunto, y esta clase llama a una DLL no administrada para hacer algún procesamiento. Aquí hay un fragmento:

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);

El problema que tengo es que si llamo " Func " Mi programa principal de C # no se descargará. Cuando llamo a Close () dentro de mi formulario principal, el proceso todavía estará allí si miro en el Administrador de tareas. Si elimino la llamada a " Func " el programa se descarga bien. He hecho algunas pruebas y la función principal de los programas definitivamente regresa, así que no estoy segura de lo que está pasando aquí.

¿Fue útil?

Solución

¿Tiene el código fuente para unmanaged.dll ? Debe estar haciendo algo, ya sea comenzando otro hilo y no saliendo, o bloqueando en su DllMain , etc.

Otros consejos

Parece que su biblioteca no administrada está generando un hilo para procesamiento asíncrono.

Las probabilidades son que admite una función de cancelación de algún tipo; Le sugiero que intente llamar a eso en el cierre del programa. Si su programa se está completando antes de que se complete la llamada asíncrona, busque un " esperar a que finalice " funciona y llama a eso antes de regresar de tu " Func " método.

Es posible que envíe un subproceso que no está en segundo plano y que no se suelta cuando se cierra la aplicación principal. No puedo decir con seguridad sin ver el código, pero eso es lo que yo asumiría.

Probablemente sea menos ideal, pero si necesitas una solución alternativa, probablemente podrías usar:

System.Diagnostics.Process.GetCurrentProcess().Kill();

Esto finalizará tu aplicación en el nivel de proceso y eliminará todos los subprocesos que se generan a través del proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top