2013-04-06 34 views
2

我對WPF - C#5.0,.NET4.5中的Window.IsEnabled屬性有個疑問。WPF - window.IsEnabled setter長期持續時間

我有以下情形(簡化):

1)形式與按鈕

2)用戶觸發的長計算​​操作(從DB讀取一些數據)

3)用戶能夠用新的數據

我已經實現了這個以下方式進行交互:

1)單擊處理禁用的窗口(用戶交互)和火災異步操作(這可以同步進行,也沒關係)

2)當異步運算完成時,窗口被ENABLED(經由myWindowInstance .IsEnabled =真

而且我的問題是:

的myWindowInstance.IsEnabled =真正需要大約20秒。我必須注意,窗口中有一個用於獲取數據的dataGridView。但是,如果不禁用並重新啓用贏取,則全部需要大約1秒。另一個有趣的問題是,當我連接到小型本地數據庫時,win.IsEnabled設置器會很快完成。與此相反,如果我使用遠程巨大的數據庫,則如前所述,此操作需要20秒。在這兩種情況下,我只讀取100行。

有誰知道爲什麼簡單的setter需要這麼多時間?

很多感謝任何想法!

+0

你有沒有解決這個問題或找到這種行爲的原因?我有類似的經歷...... – klawusel 2015-10-06 09:31:07

回答

1

有一件事你可以做而不是禁用你的窗口,只是啓用/禁用你插入其他控件頂部的半透明矩形,用戶將無法點擊任何東西。 完成後,禁用它或將其可見性屬性設置爲隱藏。

<Window> 
    <Grid> 
     <TextBox Text="Hello" HorizontalAlignment="Left" VerticalAlignment="Top" ></TextBox> 
     <Rectangle Fill="DarkGray" Opacity="0.5" /> 
    </Grid> 
</Window> 

現在對於大量的時間花費您的問題,你就應該剖析使用Visual Studio中的「分析」菜單應用程序。