2009-12-08 15 views
6

Tiêu đề về nó. WPF ứng dụng với một số công cụ WCF cho IPC. Tôi gọi Application.Current.Shutdown() và ứng dụng tiếp tục vui vẻ. Tôi nghĩ rằng Shutdown được cho là không thể ngăn cản được.Application.Current.Shutdown() không

Có lẽ vì nó đang được gọi từ một chuỗi nền? Tôi có cần phải làm một số điều phối viên không?

Trả lời

12

Bạn nhận được một ngoại lệ khi tôi gọi Application.Current.Shutdown trong bất kỳ chủ đề nào khác ngoài chủ đề chính, vì vậy, tôi giả sử bạn sử dụng "điều phối viên không đúng".

Trong mọi trường hợp, điều này biên soạn và bỏ một ứng dụng, vì vậy nếu các bit điều phối không giống như những gì bạn có, bạn có thể sling nó trong:

ThreadStart ts = delegate() 
    { 
     Dispatcher.BeginInvoke((Action)delegate() 
     { 
      Application.Current.Shutdown(); 
     }); 
    }; 
Thread t = new Thread(ts); 
t.Start(); 
+0

Tôi đã cố gắng để tìm ra điều này và điều này dường như làm việc. Có bất kỳ lời giải thích nào về cách gói một cuộc gọi điều phối trong một chủ đề làm cho nó hạnh phúc không? – StrikeForceZero

+0

Một số lớp sử dụng các luồng không chạy trên nền. Và Shutdown thường chỉ tự động giết các chủ đề nền. Vì vậy, bạn nên cố gắng đảm bảo vứt bỏ bất kỳ biến nào sử dụng một lớp sử dụng luồng trước khi thoát. – Zunair

10

Theo kinh nghiệm của tôi, tất cả các chuỗi phải được chấm dứt một cách rõ ràng hoặc được đánh dấu làm chủ đề nền để ứng dụng đóng lại.

Dưới đây là một ví dụ về đá off a thread đọc ở chế độ nền:

_readThread = new Thread(new ThreadStart(ReadThread)); 
_readThread.Name = "Receiver"; 
_readThread.Priority = ThreadPriority.Highest; 
_readThread.IsBackground = true; 
_readThread.Start(); 

Thuộc tính IsBackground là chìa khóa. Nếu không được thiết lập, chuỗi sẽ không chấm dứt khi bạn gọi tắt máy.

+0

Ứng dụng đóng bình thường thông qua các phương tiện khác. – Thomas

+0

Cảm ơn một loạt các bình luận này, nó đã cứu tôi một số nhức đầu chính cố gắng tìm ra lý do tại sao ứng dụng của tôi không thoát hoàn toàn. –

1

tôi chỉ trải nghiệm Application.Current.Shutdown không hoạt động khi tôi m chạy từ Visual Studio. Trong Visual Studio (ít nhất là phiên bản 2010 tôi đang sử dụng) Application.Current.Shutdown không làm gì cả. Nếu tôi bước qua nó thực hiện dòng này và sau đó tiếp tục. Nếu tôi chạy chương trình (như là một .exe) từ Windows Explorer thì Application.Current.Shutdown hoạt động tốt.

Có thể có giải thích cho điều này vì trong quá trình gỡ lỗi các chủ đề khác đang hoạt động, nhưng tôi không thể giải thích.

+0

Yea, cùng ở đây, nhưng nó thực sự gây rối với việc gỡ lỗi của tôi. – ProfK

Các vấn đề liên quan