C#杀死所有主题

前端之家收集整理的这篇文章主要介绍了C#杀死所有主题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序,使用InvokeMember()调用我的DLL,如下所示:
  1. Assembly OCA = Assembly.LoadFrom("./Modules/ProcessFiles.dll");
  2. Type[] types = OCA.GetTypes();
  3. foreach (var type in types)
  4. {
  5. //MethodInfo[] methods = type.GetMethods();
  6. if (type.Name == "Converter")
  7. {
  8. var tmpType = type;
  9. var obj = Activator.CreateInstance(tmpType);
  10. Thread t = new Thread(
  11. () =>
  12. tmpType.InvokeMember("Run",BindingFlags.Default | BindingFlags.InvokeMethod,null,obj,null));
  13. t.Start();
  14. break;
  15. }
  16.  
  17. }

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

  1. Thread thread = new Thread(
  2. delegate(){
  3. while(true)
  4. {
  5. GetFilesInFolder();
  6. Thread.Sleep(120000);
  7. }
  8. });
  9. ne.Start();

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

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

解决方法

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

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

猜你在找的C#相关文章