2010-05-26 24 views
6

Tôi gặp vấn đề nghiêm trọng với Ứng dụng WPF của mình. Tôi đã nhận ra Thư viện điều khiển WPF để sử dụng như một Addin trong MS Office 2007.WPF Nhận Giao diện Người dùng, hoặc cách hiển thị cửa sổ từ Chủ đề NON-UI

Lớp WPF được khởi tạo bởi máy chủ và tạo thanh công cụ với một số nút trong MS Office. Bằng cách nhấp vào nút, cửa sổ wpf sẽ xuất hiện. Vấn đề là tôi luôn nhận được lỗi sau: "Chuỗi cuộc gọi phải là STA, vì nhiều thành phần giao diện người dùng yêu cầu điều này." Chức năng chính của tôi được đánh dấu là [STAThread].

Dường như sự kiện button_Click chạy trong một chủ đề khác so với giao diện người dùng UI.

Tôi đã cố gắng sử dụng một điều phối viên, nhưng điều đó không hiệu quả.

Dispatcher.CurrentDispatcher.Invoke(
       System.Windows.Threading.DispatcherPriority.Normal, 
       new Action(
       delegate() 
       { 
    wpfform wf = new wpfform(); 
    wf.ShowDialog(); 
    )); 

Tôi nghĩ rằng mô-đun nhận được điều phối sai, nhưng tôi không biết chính xác. Tiếp theo, tôi đã cố gắng để khởi động cửa sổ trong một chuỗi sta riêng biệt và tham gia vào chuỗi, nhưng điều này không hoạt động. Khi tôi đã xóa thuộc tính [STAThread] khỏi chức năng chính, cửa sổ đã bắt đầu, nhưng tôi không thể truy cập vào văn phòng (vì tôi đang ở trong một chuỗi riêng biệt).

Thread workerThread = new Thread(_ShowDialog); 
workerThread.SetApartmentState(ApartmentState.STA); 
workerThread.Start(); 
workerThread.Join(); 

Có thể xác định chuỗi ui và tạo bộ điều phối cho chuỗi này không, hoặc làm cách nào tôi có thể quay lại chuỗi ui.

Vì vậy, vui lòng trợ giúp. Cảm ơn câu trả lời của bạn.

Trả lời

8

Bạn sẽ cần sử dụng trình điều phối giao diện người dùng ứng dụng. Thử sử dụng:

Application.Current.Dispatcher.Invoke(...) 
+1

Tôi tin rằng tên mặc định cho Ứng dụng là Ứng dụng trong các ứng dụng WPF. – DEHAAS

+0

Thật không may Application.Current là null :(Bất kỳ ý tưởng nào khác? – MarkusEm

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