У меня есть приложение, которое вызывает мою DLL с помощью InvokeMember ()
следующим образом:
Assembly OCA = Assembly.LoadFrom("./Modules/ProcessFiles.dll");
Type[] types = OCA.GetTypes();
foreach (var type in types)
{
//MethodInfo[] methods = type.GetMethods();
if (type.Name == "Converter")
{
var tmpType = type;
var obj = Activator.CreateInstance(tmpType);
Thread t = new Thread(
() =>
tmpType.InvokeMember("Run", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj,
null));
t.Start();
break;
}
}
Моя DLL затем создает новый поток и начинает обработку. В своей DLL я создаю новую ветку следующим образом:
Thread thread = new Thread(
delegate(){
while(true)
{
GetFilesInFolder();
Thread.Sleep(120000);
}
});
ne.Start();
Цель состоит в том, чтобы периодически проверять папку. Проблема в том, что когда я закрываю приложение, которое вызывает мою DLL, процесс не закрывается. Есть ли способ закрыть все потоки?
NB: Я не могу изменять приложение, я могу только изменять свою DLL.