mam aplikację, która wywołuje mój DLL z InvokeMember()
tak:C# zabić wszystkich wątków
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;
}
}
Moje DLL następnie tworzy nowy wątek i rozpoczyna przetwarzanie. W mojej bibliotece DLL utworzę nowy wątek:
Thread thread = new Thread(
delegate(){
while(true)
{
GetFilesInFolder();
Thread.Sleep(120000);
}
});
ne.Start();
Celem jest okresowe sprawdzanie folderu. Problem polega na tym, że kiedy zamykam aplikację, która wywołuje moją bibliotekę DLL, proces nie jest zamykany. Czy istnieje sposób na zamknięcie wszystkich wątków?
NB: Nie mogę zmodyfikować aplikacji, mogę tylko modyfikować moją bibliotekę DLL.
Próbowałem użyć timera, ale nie mogłem dostać Threading.Timer pracy. – hs2d
Jest też Timers.Timer –
Tak, wiem o tym wszystkim. Może możesz dać mi działający przykład wykorzystania timera w mojej sytuacji? – hs2d