C#杀死所有主题
发布时间:2020-12-15 17:46:01 所属栏目:百科 来源:网络整理
导读:我有一个应用程序,使用InvokeMember()调用我的DLL,如下所示: Assembly OCA = Assembly.LoadFrom("./Modules/ProcessFiles.dll");Type[] types = OCA.GetTypes();foreach (var type in types){ //MethodInfo[] methods = type.GetMethods(); if (type.Name =
我有一个应用程序,使用InvokeMember()调用我的DLL,如下所示:
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的应用程序时,该进程未关闭.有没有办法关闭所有线程? 注意:我无法修改应用程序,我只能修改我的DLL. 解决方法
将线程的
IsBackground 属性设置为true.当你的应用程序完成时,这将终止该线程.
另外:为什么不使用一个定时器(或只是一个线程)来唤醒和分析数据.这应该更加资源友好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |