Ho un'applicazione che richiama la mia DLL con InvokeMember()
in questo modo:C# Uccidi tutte le discussioni
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;
}
}
mio DLL crea nuovo un filo e avvia l'elaborazione. Nella mia DLL, creo un nuovo thread come questo:
Thread thread = new Thread(
delegate(){
while(true)
{
GetFilesInFolder();
Thread.Sleep(120000);
}
});
ne.Start();
L'obiettivo è controllare periodicamente la cartella. Il problema è che quando chiudo l'applicazione che richiama la mia DLL, il processo non è chiuso. C'è un modo per chiudere tutti i thread?
NB: Non riesco a modificare l'applicazione, posso solo modificare la mia DLL.
ho cercato di usare il timer, ma non potevo ottenere il Threading.Timer lavoro. – hs2d
C'è anche Timers.Timer –
Sì, lo so anche io. Forse puoi darmi un esempio funzionante su come usare il Timer nella mia situazione? – hs2d