2009-05-01 39 views
7

Tôi đang gọi Application.Current.Shutdown() từ một lớp học bị ràng buộc với cửa sổ xaml với ObjectDataProvider, nhưng ứng dụng không đóng. Bất cứ ai có thể giúp tôi hiểu tại sao? Ứng dụng của tôi không đóng hoàn toàn sau khi cửa sổ chính của tôi đóng, nó không biến mất khỏi danh sách quy trình của trình quản lý tác vụ.Ứng dụng WPF không đóng đúng cách

Trả lời

8

Bạn đã tạo bất kỳ chủ đề nào để xử lý nền chưa? Nếu bạn có, hãy đảm bảo đặt thuộc tính .IsBackground trên chúng hoặc chúng có thể giữ cho ứng dụng chạy

+0

Không, tôi không tạo chủ đề trực tiếp, có thể WPF thực hiện các ràng buộc hoặc tài nguyên objectdataprovider trong chuỗi khác không? –

1

Nếu bạn có nhiều cửa sổ hoặc hộp thoại trong ứng dụng của mình, bạn có thể cần phải đóng từng cửa sổ hoặc một cách rõ ràng.

hộp thoại Đóng với:

_myDialog.Close();

Đóng tất cả các cửa sổ:

foreach(var window in Application.Current.Windows.ToList()) 
{ 
    window.Close(); 
} 
+0

Tôi cố gắng này, nó không giúp đỡ, tôi nhận ra đâu là vấn đề, vấn đề là khi tôi gọi tắt máy() hoặc đóng() việc thực thi objectdataprovider không chấm dứt, tôi nghĩ sẽ tốt hơn nếu thêm một câu hỏi mới , những gì tôi sẽ làm bây giờ :) –

+0

chắc chắn bạn có thể thay thế cho (i ...) với một foreach? lặp lại theo cách thủ công qua các vòng lặp là thế kỷ trước :-) –

25

Hãy thử Environment.Exit(0) thay

+3

gọi 'Shutdown()' từ bên trong 'override OnStartup()' KHÔNG hoạt động. 'Environment.Exit (0)' hoạt động –

4

Đừng quên để thêm video này:

private void Window_Closed(object sender, EventArgs e) 
{ 
    Application.Current.Shutdown(); 
} 

Hope this helps.

0

Tôi đã gặp sự cố tương tự, quá trình đăng ký không dừng lại mặc dù ứng dụng đã đóng.

Trong trường hợp của tôi, tôi mở một cửa sổ từ một BackgroundWorker (mã dưới đây)

BackgroundWorker BG = new BackgroundWorker(); 
BG.DoWork += new DoWorkEventHandler(BG_DoWork); 
StockMinWindow MinWindow = new StockMinWindow(null); -------- this is the problem 
BG.RunWorkerAsync(); 

instanciate cửa sổ trước khi chạy BackgroundWorker dường như không phải là vấn đề nhưng bằng cách xóa dòng ứng dụng đóng một cách chính xác

Tôi mở cửa sổ của mình từ BackgroundWorker nhưng sử dụng Chủ đề chính (mã bên dưới)

View.Dispatcher.BeginInvoke(new Action(delegate() 
{ 
    StockMinWindow MinWindow = new StockMinWindow(StockMinList); 
    MinWindow.Owner = View; 
    MinWindow.ShowDialog(); 
})); 

Hy vọng điều đó sẽ hữu ích.

0

Tôi gặp sự cố khi ứng dụng sẽ không tắt ngay cả khi cửa sổ chính bị đóng. Nó bật ra tôi đã thực hiện Hide() trên màn hình splash thay vì Close() vì vậy nó vẫn còn ẩn trong nền giữ ứng dụng còn sống.

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