2012-01-30 25 views
6

Tôi đã gặp một vài vấn đề khó chịu với các ứng dụng WPF gặp sự cố trên một số máy khách nhưng làm việc ở mọi nơi khác - mọi cơn ác mộng của nhà phát triển.Cửa sổ WPF bị treo khi khởi động, hoặc nó bắt đầu nhưng bị treo và không hiển thị nội dung

Tôi đang đăng các vấn đề/giải pháp ở đây để giúp duy trì sự lành mạnh của các nhà phát triển đồng nghiệp. Đây không phải là dễ dàng để khắc phục sự cố.

Cả hai vấn đề này đều là vấn đề kinh điển "nó hoạt động trên máy của tôi nhưng không phải của chúng".

  1. Ứng dụng WPF gặp sự cố khi khởi động. Không có lỗi, không biết tại sao.
  2. Ứng dụng WPF khởi động, đường viền cửa sổ hiển thị, nhưng nội dung không sơn. Nó chỉ bị treo (được báo cáo là "cửa sổ trong suốt") Nhấp để đóng các trình kích hoạt báo cáo sự cố (máy là Windows XP).

Trả lời

17

1) Ứng dụng WPF gặp sự cố khi khởi động. Không có lỗi, không biết tại sao.

Bước khắc phục sự cố quan trọng để thực sự tìm thấy lỗi ở địa điểm đầu tiên là thêm xử lý lỗi bổ sung vào app.xaml.

Trong tiêu đề App.xaml của bạn, thêm:

<Application DispatcherUnhandledException="App_DispatcherUnhandledException" /> 

và trong App.xaml.cs của bạn, thêm một cái gì đó như:

void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs args) 
    { 
     log.Fatal("An unexpected application exception occurred", args.Exception); 

     MessageBox.Show("An unexpected exception has occurred. Shutting down the application. Please check the log file for more details."); 

     // Prevent default unhandled exception processing 
     args.Handled = true; 

     Environment.Exit(0); 
    } 

Sau khi thêm gỡ lỗi bổ sung này, tôi bắt gặp những lỗi :

System.TypeInitializationException: Trình khởi tạo kiểu cho 'System.Windows.Media.FontFamily' đã ném ngoại lệ. ---> System.ArgumentException: Ký tự không hợp lệ trong đường dẫn.

Tiếp tục nghiên cứu, googling, và cà phê, dẫn đến giải pháp mà các máy client đã có một dấu '◻' nhân vật trong một mục phông chữ trong registry dưới

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Fonts

Xóa ký tự lừa đảo này đã giải quyết được sự cố.

No idea how this got into the registry

Xem sự nghiệp tiết kiệm bài đăng blog "How to Crash every WPF application".

2) Ứng dụng WPF khởi động, đường viền cửa sổ hiển thị, nhưng nội dung không sơn. Nó chỉ bị treo (được báo cáo là "cửa sổ trong suốt")

Đây là một vấn đề liên quan đến phông chữ khác. Ban đầu tôi đã luộc nó xuống một fontSize = "16" trong Window.xaml không làm việc trên một (và chỉ một máy) tại một trang web của khách hàng, như thể WPF từ chối hiển thị phông chữ của chúng ở kích thước 16 (?). Tôi đã xóa mã chỉ định kích thước phông chữ và nó hoạt động ... nhưng khi nó quay ra, nó chỉ hoạt động cho hồ sơ đăng nhập của tôi. Nó tiếp tục thất bại cho hồ sơ đăng nhập của một đồng nghiệp trên cùng một máy máy. Tôi thực sự có thể đăng nhập như bản thân mình, chạy nó thành công, đăng xuất, anh ta sẽ đăng nhập như chính mình, chạy nó, và nó sẽ thất bại với "cửa sổ treo trong suốt". Cùng một máy, cùng quyền.

Như một phương sách cuối cùng, tôi đã đăng nhập với tư cách anh ấy và nhận thấy anh ấy có một chủ đề tùy chỉnh tùy chỉnh được đặt bằng phông chữ mở rộng. Tôi đã thay đổi chủ đề cửa sổ về chủ đề cổ điển ... và điều này đã khắc phục vấn đề (?!?). Vấn đề này dường như cũng liên quan đến phông chữ, nhưng tôi không xác định được nguyên nhân gốc tuyệt đối. Thay đổi chủ đề về chủ đề chuẩn là giải pháp tạm thời.

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