Killing all threads that opened by application

随声附和 提交于 2019-11-26 21:06:10

问题


I have some really big application mixture of c# and j#.

Sometimes when I close it, there are some threads that are not closed and they are hanging in the task manager and it is impossible to kill them from there.

I have really problem to find all those threads and add them to the closing event .

Is there some way violently kill all threads that were opened by application in the closing event ?...

Thanks.

Is there maybe some Tool that can tell me what threads are opened while i close the application and who openned them ?


回答1:


This shouldn't be happening, and if it is, you're trying to address it the wrong way.

When your application exits, the .NET Framework will automatically kill any threads whose IsBackground property is set to "True". Designate each of your worker threads as background threads, and you won't have this problem anymore. Taking advantage of the BackgroundWorker class and the ThreadPool class, which automatically create background threads, is a much better option.

Otherwise, you need to clean up your foreground threads explicitly. A properly designed application will do its own bookkeeping and have a deterministic, structured way of ensuring that all its threads have been closed before exiting the Main method. This is what you should be doing anyway if your threads require a graceful termination.

Killing the process is a very bad idea, as is letting your threads run about willy-nilly in your application.




回答2:


You can use : Environment.Exit(0); , that will shutdown the application if threads are running and wont cause any problems.




回答3:


You should close your threads gracefully, but just want you and others to know the way that is not recommended but possible:

on your OnClose Handler:

System.Diagnostics.Process.GetCurrentProcess().Kill();

I totally prefer Cody Gray way of doing it.




回答4:


Well, you could call Application.Exit() but that won't be of much help. The bottom line is that you have to gracefully close all of the threads yourself if you want to do things properly.




回答5:


My 2 cents... to all answers...

Try to force SHUTDOWN

Put into void CurrentApplication_Exit(object sender, ExitEventArgs e) and private void Window_Closing(object sender, CancelEventArgs e) those lines

System.Windows.Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
System.Windows.Application.Current.Shutdown();



回答6:


internal void Close()
{
    Dispatcher.CurrentDispatcher.Thread.Abort();
    Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
    Application.Current.Shutdown();
}



回答7:


I was having similar issue while closing form/application. It was not really exiting from the debug mode and comes to the design mode. Following resolves my issue.

  1. Followed the link. Windows Form Application, Thread won't stop
  2. Step one did not resolved it. Environment.Exit(0); - Resolves and worked fine.


来源:https://stackoverflow.com/questions/5002279/killing-all-threads-that-opened-by-application

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!