C#杀死所有主题

hs2*_*s2d 6 c# multithreading

我有一个应用程序调用我的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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我的DLL然后创建一个新线程并开始处理.在我的DLL中,我创建了这样的新线程:

Thread thread = new Thread(
    delegate(){
        while(true)
        {
            GetFilesInFolder();
            Thread.Sleep(120000);
        }
    });
ne.Start();
Run Code Online (Sandbox Code Playgroud)

目标是定期检查文件夹.问题是,当我关闭调用我的DLL的应用程序时,该进程未关闭.有没有办法关闭所有线程?

注意:我无法修改应用程序,我只能修改我的DLL.

GvS*_*GvS 8

IsBackground线程的属性设置为true.当你的应用程序完成时,这将终止该线程.

另外:为什么不使用一个定时器(或只是一个线程)来唤醒和分析数据.这应该更加资源友好.


Bas*_*Bas 6

您是否尝试使用System.IO.FileSystemWatcher?这会在文件夹中发生更改时抛出事件.看起来这将简化您的解决方案.