2012-06-20 13 views
12

Mam aplikację WPF, po zamknięciu aplikacji jej proces app.exe *32 nadal działa na liście procesów w menedżerze zadań.Proces aplikacji nie zostanie zamknięty

Muszę to, aby zamknąć jak kiedy wprowadzić zmiany do mojego kodu pojawia się następujący błąd -

Unable to copy file "obj\x86\Release\frontEndTest.exe" to "bin\Release\app.exe". The process cannot access the file 'bin\Release\app.exe' because it is being used by another process. 

mam świadomość, że tego rodzaju pytania został poproszony przed here.

jednak rozwiązanie nie działa dla mnie zmieniając mój Assembly.cs do -

[assembly: AssemblyVersion("2.0.0")] 
[assembly: AssemblyFileVersion("2.0.0")] 

pomyślałem, że może gdybym znaleźćZdarzeniei umieszczenie czegoś podobnego - Process.GetCurrentProcess().Kill(); w przypadku, gdy użytkownik zamknął aplikację z czerwonego przycisku 'x' w prawym górnym rogu formularza, może zabiłoby to proces?

+2

Najprawdopodobniej niektóre wątki nadal działają po zamknięciu głównego okna. Czy używasz 'BackgroundWorker's lub' Thread's? Jeśli tak, będziesz musiał jakoś zasygnalizować im zakończenie. – Jon

+0

Istnieją dwie kategorie wątków: Tło i tło. Nić w tle zostanie automatycznie zakończona, gdy zakończy się proces nadrzędny; wątki inne niż działające w tle utrzymają proces nadrzędny. Być może masz jeden lub więcej wątków, które powinny być wątkami tła? –

+0

Rozumiem, w jaki sposób mogę stwierdzić, które wątki są uruchomione i jak je zakończyć? – Ebikeneser

Odpowiedz

41

Twój proces jest nadal żywy po zamknięciu go. Zwykle oznacza to, że masz wątek, który utrzymuje go przy życiu. Oto, jak możesz to wyśledzić.

pierwsze, należy dołączyć do niego w debuggera:

                                enter image description here

enter image description here

                                        enter image description here

Teraz otwórz listę wątków:

        enter image description here

Dwukrotnie kliknij każdy nitkę widać tutaj:

enter image description here

I zostaniesz przeniesiony do tego, co aktualnie robi wątek:

                              enter image description here

To właśnie to, co uniemożliwia zamknięcie aplikacji. Aby wyjść z tej aplikacji, trzeba wyjść z tej pętli (lub, alternatywnie, ustawić Thread.IsBackground na true).

+0

To jest bardzo przydatna odpowiedź, a teraz mogę zobaczyć wątki, jednak źródło jest niedostępne, ponieważ jest w twojej aplikacji? – Ebikeneser

+0

@Jambo Ale możesz zobaczyć wątek, który utrzymuje go przy życiu, prawda? Czy ma imię? Jaka jest kategoria? W swoim pytaniu możesz opublikować zrzut ekranu z wątkami. –

+0

Czy możemy to zrobić bez Visual Studio? – user960567

10

Environment.Exit (0);

Terminates this process and gives the underlying operating system the specified exit code.  

0 jest zwracana po pomyślnym zakończeniu.

Powiązane problemy