Đầu tiên một chút về nền: Tôi có một ứng dụng WPF, là một giao diện đồ họa-front-end cho một ứng dụng Win32 kế thừa. Ứng dụng cũ chạy dưới dạng DLL trong một chuỗi riêng biệt. Các lệnh mà người dùng chọn trong giao diện người dùng được gọi trên "chuỗi kế thừa" đó.Application.Current.Shutdown() so với Application.Current.Dispatcher.BeginInvokeShutdown()
Nếu "chuỗi kế thừa" kết thúc, GUI-front-end không thể làm bất cứ điều gì hữu ích nữa, vì vậy tôi cần phải tắt ứng dụng WPF. Do đó, ở cuối phương thức của luồng, tôi gọi Application.Current.Shutdown()
.
Vì tôi không nằm trong chuỗi chính, tôi cần gọi lệnh này. Tuy nhiên, sau đó tôi nhận thấy rằng Dispatcher cũng có BeginInvokeShutdown()
để tắt máy điều phối. Vì vậy, câu hỏi của tôi là: sự khác biệt giữa cách gọi
Application.Current.Shutdown();
và gọi là gì
Application.Current.Dispatcher.BeginInvokeShutdown();
Vâng, đó chính là câu hỏi không được trả lời trong tài liệu: Việc tắt trình điều phối của ứng dụng cũng tắt ứng dụng? –
Tôi đã xây dựng một ứng dụng thử nghiệm WPF đơn giản cho việc này. Để mô phỏng mã của bạn, tôi đã làm: 'Thread t = new Thread (new ThreadStart (delegate() {Thread.Sleep (50000);})); t.Start(); Application.Current.Dispatcher .BeginInvokeShutdown (System.Windows.Threading.DispatcherPriority.Normal); '. Việc tắt Dispatcher đã giết chết chủ nhân của nó và đóng cửa sổ lại, nhưng đã làm * không * giết chủ đề nền. – JustABill
Hai khác biệt nhỏ: 1) Tôi gọi tắt máy trong chuỗi thứ hai (mặc dù thông qua thử nghiệm tôi có thể thấy rằng nó không có sự khác biệt). 2) Tôi có chuỗi thứ hai được đặt làm chủ đề nền (IsBackground = true). Bằng cách đó, nó cũng bị giết nếu chủ đề chính thoát. –