簡體   English   中英

通過WCF關閉WPF應用程序花費的時間太長

[英]Closing WPF Application Via WCF Takes Too Long

我有一個托管WCF服務的WPF應用程序。 該服務的一部分是從另一個客戶端(在同一台計算機上運行)關閉應用程序的能力。 我使用以下代碼在WCF服務中將其關閉:

MainWindow form = MainWindow.CurrentInstance;
form.MySynchronizationContext.Send(_ => form.CloseWindow(), null);

我的MainWindow是使用靜態CurrentInstance變量設置的,因此我可以獲取當前窗口,然后通過SynchronizationContext調用添加的方法CloseWindow。 所有這些都可以正常工作,只是關閉它需要很長時間(大約10秒),這比手動關閉應用程序要長得多。

有沒有更好的方法來做到這一點,並且響應速度更快?

更新-目前,CloseWindow函數僅調用Close(),但最終可能還會執行其他一些操作。

我已經找到了解決此問題的方法,但是我不完全理解為什么這首先是一個問題,因為它本來應該是這樣。

聲明了以下服務

[ServiceBehavior(UseSynchronizationContext = false)]

我的理解是,即使使用MainWindow類創建了該語句,該服務仍將被迫創建自己的線程,而不是在UI線程上運行。 事實證明似乎並非如此。 從那以后,我在創建主機之前將主機創建移到了MainWindow類之外,現在關閉幾乎立即發生。 我只能假定(無需更深入地研究)UseSynchronizationContext = false不會強制在UI線程上不創建服務主機。

盡管這可以解決問題,但我很想知道為什么設置服務行為沒有任何區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM